2011-10-26 16 views
13

Tôi đã viết một ứng dụng bằng cách sử dụng Spring Batch. Tôi có thể thấy với VisualVM rằng kích thước heap là khoảng 22 MB. Tuy nhiên, khi tôi sử dụng Process Explorer (trên Windows) để xem có bao nhiêu bộ nhớ được sử dụng bởi nó, sự khác biệt là lớn (Private byte - 71560K và Working Set - 80388K). Làm thế nào để giải thích điều này? Những thứ khác sử dụng bộ nhớ này là gì?Tổng bộ nhớ được sử dụng bởi quy trình Java và kích thước heap

Cảm ơn

Trả lời

2

đừng quên không gian gốc (ngăn xếp)! Heap chỉ đại diện cho các đối tượng, chủ đề/nguyên thủy chiếm bộ nhớ bổ sung. Ngoài ra AFAIK, một khi một quá trình chiếm bộ nhớ, mặc dù các nội dung có thể được thu thập rác, đó là vào những thời điểm không được phát hành trở lại hệ điều hành. Plus, tôi không chắc chắn của VisualVM, nhưng eclipse MAT chỉ cho thấy đống đó là "hiện tại" (sẽ không được thu thập rác nếu GC được chạy vào thời điểm đó trong thời gian). Bạn cũng có thể muốn xem jstat.

5

Có thư viện được chia sẻ, Ngăn xếp của chủ đề, bộ đệm, bộ nhớ trực tiếp, tệp được ánh xạ bộ nhớ.

Tuy nhiên, JVM phân bổ kích thước heap tối đa khi khởi động. Số lượng được sử dụng không quan trọng lắm.