Phương pháp tĩnh chỉ là phương pháp, chúng không được lưu trữ trên heap, chúng chỉ không sử dụng tham số "this".
Biến tĩnh đóng vai trò là "gốc" cho GC. Kết quả là, trừ khi bạn đặt chúng một cách rõ ràng thành null, chúng sẽ sống miễn là chương trình đang hoạt động và tất cả mọi thứ đều có thể truy cập được từ chúng.
Tình huống chỉ được coi là rò rỉ bộ nhớ nếu bạn định để bộ nhớ tự do và không trở nên miễn phí. Nếu bạn dự định biến tĩnh của bạn chứa tham chiếu đến một đối tượng trong một phần thời gian, và bạn quên đặt nó thành null khi bạn đã hoàn thành với đối tượng đó, bạn có thể sẽ bị rò rỉ. Tuy nhiên, nếu bạn đặt nó trong biến tĩnh và có ý định cho nó ở đó miễn là chương trình đang chạy, thì chắc chắn nó không phải là một sự rò rỉ, nó có thể là một "singleton vĩnh viễn". Nếu đối tượng bị khai hoang trong khi bạn muốn nó vẫn tồn tại, điều đó sẽ rất tệ.
Đối với câu hỏi của bạn về heap: Tất cả các đối tượng trong Java tồn tại trên đống hoặc trên ngăn xếp. Các đối tượng được tạo trên heap với toán tử mới. Sau đó, một tham chiếu được đính kèm với chúng. Nếu tham chiếu trở thành null hoặc nằm ngoài phạm vi (ví dụ: kết thúc khối), GC sẽ nhận ra rằng không có cách nào để tiếp cận đối tượng đó một lần nữa và reclaims nó. Nếu tham chiếu của bạn nằm trong một biến tĩnh, nó không bao giờ nằm ngoài phạm vi nhưng bạn vẫn có thể đặt nó thành null hoặc cho một đối tượng khác.
IIRC các trường tĩnh sẽ được GCed ngay sau khi lớp khai báo là GC.Nếu trường hợp elast thứ nhất của lớp đó biến mất thì khai báo lớp sẽ đi và các trường tĩnh với nó. – ordnungswidrig
Tôi không chắc chắn nếu @ o11rig hoàn toàn chính xác, nhưng tôi tin rằng GC được phép thu thập các số liệu thống kê cho các lớp học không có thành viên trong một số trường hợp nhất định. Tôi đã nghe điều này từ một vài nguồn, nhưng chưa bao giờ nghe một lời giải thích chính xác. –
Giảm phân tán: Tất cả các đối tượng Java * * đều nằm trong vùng heap. Tham chiếu * đối tượng * và nguyên thủy có thể được lưu trữ trên ngăn xếp nếu chúng là người dân địa phương của phương pháp hiện đang thực hiện và được lưu trữ trên heap nếu không. (Ngoại trừ trong bất kỳ JVM hiện đại nào có JIT, nơi trình tối ưu hóa của JIT có thể đặt các đối tượng ở bất cứ nơi nào nó thích, miễn là nó vẫn hoạt động * như các đối tượng nằm trên đống.) Và có thể lập luận rằng các phương thức tĩnh - hoặc , ít nhất, mã byte Java thực hiện chúng - cũng sống trên heap, như là một phần của đối tượng Class đại diện cho lớp mà chúng được định nghĩa. –