Was sammelt GC hier?

8

Das könnte ziemlich einfach sein, war aber sehr neugierig. Hier ist das Code-Snippet und die Ausgabe

%Vor%

und die Ausgabe

%Vor%

Ich bin daran interessiert zu wissen, was GC hier sammelt, da keine Objekte erstellt werden.

Was ist die Erinnerung, die frei wird? (und das auch 52kb)

@JSauer - Es gibt genau die gleichen Ergebnisse, selbst wenn 100 mal ausgeführt wird

    
JWhiz 05.08.2010, 16:44
quelle

1 Antwort

9

Bei den meisten JVM-Implementierungen ist die main -Methode nicht der erste Java-Code, der während des JVM-Starts ausgeführt wird.

Normalerweise sind viele Teile einer vollständigen JRE selbst in Java implementiert. Zum Beispiel ist ein großer Teil des Klassenlademechanismus in reinem Java implementiert. Es könnte sogar in der Lage sein, Teile des Speicherbereinigungsalgorithmus selbst in Java zu schreiben.

Aus diesem Grund kann es vorkommen, dass die Systemklassen, die das GC sammeln kann, bereits etwas Müll enthalten, selbst wenn Ihre Anwendung überhaupt keinen Müll erzeugt hat.

Übrigens erstellt Ihre Anwendung mindestens ein Objekt, das für die Speicherbereinigung geeignet ist, an dem Punkt, an dem System.gc() aufgerufen wird: Die String , die den freien Speicher angibt, wird dynamisch erstellt und nicht in einer Variablen gespeichert es könnte gut während des System.gc() Aufrufs gc-ed sein.

    
Joachim Sauer 05.08.2010, 16:51
quelle

Tags und Links