Ich möchte absichtlich Elemente zu einer Datenstruktur hinzufügen, bis Java eine OutOfMemoryError
auslöst und einen Heap-Dump unter Verwendung von -XX:+HeapDumpOnOutOfMemoryError
ergreift. Ich verwende -Xmx100M
, also erwartete ich, dass der Heap-Dump fast 100 MB Live-Objekte anzeigen würde, aber stattdessen zeigt es nur 46 MB.Warum zeigt mein Java-Heap-Dump nur den halben Heap an?
Warum würde Java OOM mit einem 100-MB-Heapspeicher werfen, wenn es nur 46 MB Live-Objekte gibt?
(.. Ich weiß, es gibt eine gute Chance, die ich habe nicht genügend Informationen, um diese Frage zu beantworten gegeben, aber ich bin nicht sicher, was relevant ist glücklich weitere Informationen je nach Bedarf hinzugefügt werden)
EDIT: Das Ende die -verbose:gc
Ausgabe:
[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
Sie OutOfMemoryErrors für eine Reihe von Gründen bekommen, einschließlich aus Heap-Speicher ausgeführt wird. Was ist der eigentliche Fehler, den Sie bekommen? –
Hallo Peter. Es ist dies: 'Ausnahme im Thread" Haupt "java.lang.OutOfMemoryError: Java-Heap-Raum \t bei java.util.Arrays.copyOf (Arrays.java: 3308)' – Doradus
Wenn Sie nicht ein großes Array erstellen, erhalten Sie ein Dump Dump ohne dieses Array. BTW ein 100 MB ist ein winziger Heap in diesen Tagen, bist du sicher, dass du es so klein sein musst? –