[英]Why all java utils for dumping heap are not working? How to dump heap?
[英]Why does my Java heap dump show only half the heap?
我故意在數據結構中添加項目,直到Java拋出OutOfMemoryError
,然后使用-XX:+HeapDumpOnOutOfMemoryError
抓取堆轉儲。 我正在使用-Xmx100M
,所以我希望堆轉儲將顯示將近100MB的活動對象,但它只會顯示46MB。
如果只有46MB的活動對象,為什么Java會用100MB的堆拋出OOM?
(我意識到我很可能沒有提供足夠的信息來回答這個問題,但是我不確定有什么意義。很高興根據需要添加更多信息。)
編輯: -verbose:gc
輸出的結尾:
[Full GC (Ergonomics) [PSYoungGen: 1056K->64K(2560K)] [ParOldGen: 7116K->7116K(7168K)] 8173K->7180K(9728K), [Metaspace: 5981K->5981K(1056768K)], 0.0071141 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[Full GC (Allocation Failure) [PSYoungGen: 64K->0K(2560K)] [ParOldGen: 7116K->7075K(7168K)] 7180K->7075K(9728K), [Metaspace: 5981K->5974K(1056768K)], 0.0190392 secs] [Times: user=0.02 sys=0.00, real=0.02 secs]
java.lang.OutOfMemoryError: Java heap space
堆分為年輕一代和老一代兩個部分。 當例如老一代人已滿或支離破碎時,您將獲得OOM,從而不可能將對象從年輕一代提升到老一代(可能還有其他)。
如果使用-verbose:gc -XX:+PrintGCDetails -Xloggc:gc.log
記錄GC使用情況,那么您將看到每個世代的大小。
您可以在此處查看如何調整世代大小:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/sizing.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.