Garbage Collection

lernen.2007

Erfahrenes Mitglied
Hallo zusammen,

könnt Ihr mir vielleicht sagen wann der GC automatisch mit der Bereinigung anfängt? Wartet er bis der Max Heap Size erreicht wird oder greift er automatisch vorher an?

Danke
 
Moin,

grundlegend kann der GC dann den Speicher freigeben, wenn keine Referenzen mehr auf ein Object bestehen!
Wann dies im Programmablauf genau passiert, ist nicht genau vorher bestimmbar!

Auch ein händisches Aufrufen (System.gc()) ändert daran nicht.
Zu einen stellt dieser Befehl nur eine Art "Empfehlung" an den GC dar, zu anderen braucht und sollte man ihn auch nicht manuell aufrufen !!

Google mal nach "java garbage collection" - da findest Du jeden Menge Infos im Netz.

Ab Java6 ist auch das Profiler-Programm "jvisualvm.exe" verfügbar, in dem Du u. a. den Heap verfolgen kannst und dabei auch die GC-Aufrufe (oder besser: die Auswirkungen der Aufrufe) !

Gruß
Klaus
 
könnt Ihr mir vielleicht sagen wann der GC automatisch mit der Bereinigung anfängt?

Das kommt ganz auf die Konfiguration drauf an. Oder genauer gesagt kommt es auf die VM (z.B. Oracle/IBM), deren Version (4 ist buäk, 5 und 6 sind afaik ähnlich, sieben hat einen neuen Collector implementiert), die Wahl der Collectoren und deren Konfiguration drauf an. Beim CMS z.B., fängt er, wenn ich mich noch richtig entsinne, defaultmässig bei 80% Füllgrad des OldGen zu marken.

desweiteren:
1. Nie, nur wenn es sich überhaupt nicht vermeiden lässt, System.gc() aufrufen. Wir stellen auf all unseren Servern die VM's das "DisableExplicitGC"-Flag auf true.
2. Man kann, wann ein Objekt gelöscht wird, nicht voraussagen (jedenfalls nicht, dass ich wüsste), man kann aber herausfinden, zu welchem Zeitpunkt es aufgeräumt wurde, indem man die "finalize"-Methode eines Objektes überschreibt.

Gruss
slowy
 
Zurück