2013-02-04 4 views
7

Biểu đồ sau có biểu thị rằng tôi đang sử dụng bộ nhớ và nó không bị thu gom rác không?Đây có phải là dấu hiệu rò rỉ bộ nhớ trong Java không?

enter image description here

tôi mong đợi biểu đồ màu cam (đống phân bổ) để đi xuống khi tôi bắt đầu sử dụng ít hơn của heap.

  • Đây có phải là giả định không hợp lệ không?
  • Sau khi được phân bổ, vùng heap có không thu nhỏ cho đến khi chương trình đóng không?
+2

Trên hầu hết các JVM, khi phân bổ đống, nó sẽ không co lại cho đến khi chương trình kết thúc. –

Trả lời

10

Rõ ràng từ biểu đồ rằng JVM của bạn có khả năng thu hẹp vùng heap. Điều này có thể được nhìn thấy từ đường màu da cam ngâm một chút ngay trước khi 3:10 pm.

Tuy nhiên, sau này JVM chọn không thu nhỏ vùng heap. Điều này gần như chắc chắn vì một phần không đủ lớn của heap không được sử dụng. Hành vi này được kiểm soát bởi -XX:MinHeapFreeRatio-XX:MaxHeapFreeRatio.

Để thảo luận, hãy xem http://stopcoding.wordpress.com/2010/04/12/more-on-the-incredible-shrinking-jvm-heap/

+0

Tuyệt vời, cảm ơn. :) – sdasdadas

+0

+1 xem mức độ sử dụng sau mỗi GC đầy đủ. Bạn có thể kích hoạt thêm nếu bạn cần nhưng thiếu GC đầy đủ cho thấy bạn không có vấn đề gì (hoặc sự rò rỉ của bạn rất chậm) –