2015-02-24 16 views
6

Tôi viết một chương trình đơn giản và sử dụng jconsole.exe để theo dõi kích thước heap của nó.Tại sao JVM heap tiếp tục phát triển?

public class HeapTest { 
    public static void main(String[] args) { 
     while(true) { 
     } 
    } 
} 

Đây là kết quả enter image description here

Tôi không hiểu tại sao kích thước heap không ngừng phát triển. Tôi không mới() bất kỳ đối tượng nào trong chương trình của tôi.

Heap được sử dụng cho chương trình của tôi là gì?

Tôi không thêm bất kỳ đối số bổ sung nào vào jconsole.exe; chỉ cần nhấp đúp vào nó, sau đó tải quá trình java theo PID.

Môi trường: Java 1.8.0_25 dưới cửa sổ 7

+0

nó có thể làm điều gì đó trong nền, tôi chắc chắn nếu bạn nhấp vào thực hiện GC (mà bạn không nên trong môi trường sống), nó sẽ thả ngay lập tức. – SMA

+0

@SMA - Nó có thể là do các chủ đề nền chạy trong JVM .. Họ có chi phí riêng của họ .. Sẽ có ít nhất 4 chủ đề khác đang chạy với chủ đề 'main' khi JVM bắt đầu. Heap có thể tăng dần do thực hiện. – TheLostMind

+0

Vâng, chúng tôi có finalizer, chủ đề vv chính trong nền đó là những gì tôi có nghĩa là .. – SMA

Trả lời

2

Không có rò rỉ bộ nhớ ở đây. Nhân rộng nó trong OSX là tốt. Nó sẽ là cuốn sách giữ dữ liệu được tạo ra bởi các hoạt động bình thường của VM bao gồm cả cho GC. Các eden đi lên và một khi GC xảy ra, bộ nhớ được sử dụng bởi heap (eden) được giảm và chu kỳ bắt đầu một lần nữa.

Khía cạnh khó hiểu là không có đối tượng nào được tạo ra bởi chương trình nhưng sẽ rất có ý nghĩa khi JVM làm như vậy và do đó tăng dần khoảng không gian eden cho tới GC tiếp theo.

Các vấn đề liên quan