Hallo
Ich habe mal eine Frage zum Heapmanagement der JVM?
Ich erzeuge mir ein Array was viel Speicher benötigt (int[][] array = new int[4000][10000]
Die Speicheranforderung bestätigt sich auch in meinem „GCViewer“-Monitor und in den Windows-System-informationen. (Physical Memory Available: 4.678K)
nun setze ich array=null;
beim nächsten GC wird der Speichr im Heap wieder freigegeben.
So weit so gut
Was passiert mit dem Heap
Meine Beobachtungen im GCViewer“-Monitor zeigt dass der Heap-Size(ca 250 mb) langsam sinkt.
Aber die Windows-System-Informationen ändern sich nicht.
Erst wenn ich (mehrmals) manuell System.gc(); ausführe sinkt der reservierte Speicher (Heap) und wird auch wieder für Windows freigegeben.
Kurz gesangt:
Der Java-Prozess in Windows behält nach dem „null-Setzen“ seine ca 250 MB selbst nach dem ersten manuellen Ausführen der GC.
Wie/Wann managed die VM die Heap-Freigabe Und wie (wann) bekommt Windows den Speicher zurück
Ich habe mal eine Frage zum Heapmanagement der JVM?
Ich erzeuge mir ein Array was viel Speicher benötigt (int[][] array = new int[4000][10000]
Die Speicheranforderung bestätigt sich auch in meinem „GCViewer“-Monitor und in den Windows-System-informationen. (Physical Memory Available: 4.678K)
nun setze ich array=null;
beim nächsten GC wird der Speichr im Heap wieder freigegeben.
So weit so gut
Was passiert mit dem Heap
Meine Beobachtungen im GCViewer“-Monitor zeigt dass der Heap-Size(ca 250 mb) langsam sinkt.
Aber die Windows-System-Informationen ändern sich nicht.
Erst wenn ich (mehrmals) manuell System.gc(); ausführe sinkt der reservierte Speicher (Heap) und wird auch wieder für Windows freigegeben.
Kurz gesangt:
Der Java-Prozess in Windows behält nach dem „null-Setzen“ seine ca 250 MB selbst nach dem ersten manuellen Ausführen der GC.
Wie/Wann managed die VM die Heap-Freigabe Und wie (wann) bekommt Windows den Speicher zurück