
Der Shared Garbage Collector (SGC) räumt im Shared Pool nicht mehr benötigte Objekte ( Shared Closures) auf. Im Unterschied zum normalen (VM-lokalen) Garbage Collector müssen am SGC alle VMs teilnehmen. Erst danach wird nicht mehr benötigter globaler Speicher freigegeben.
Ablauf der Shared Garbage Collection
Eine Shared Garbage Collection besteht aus einem Zyklus, zu dem alle Java VMs beitragen müssen. Während dieses Zyklus nimmt der SGC und die VMs verschiedene Zustände an. Die Zustände sehen Sie im Kopfbereich der VM-Übersicht (vgl. VM Übersicht: allgemeine Informationen).
Vor Beginn des Zyklus ist der SGC im Zustand Inak tiv und die VMs im SGC Status Neutral (vgl. VM Übersicht: Tabelle der VMs).
Ein SGC-Zyklus beginnt, sobald eine VM eine Full Garbage Collection (Full GC) in ihrem lokalen Heap-Speicher durchführt. Der Zustand des SGC ändert sich dann auf Aktiv; VMs sollen beitragen. Der SGC Status der VMs ändert sich auf Hat beigetragen für die VMs, die bereits beigetragen haben und auf Soll beitragen für die VMs, die noch nicht beigetragen haben.
Nachdem 80% aller VMs zum SGC beigetragen haben, werden die restlichen 20% zum Beitrag gezwungen. Dann ändert sich der Zustand des SGCs auf Aktiv; VMs müssen beitragen und der SGC Status der VMs auf Muss beitragen.
Ist, unabhängig vom Beitragsstatus der VMs, der globale Speicher (Shared Pool) zu 90% aufgebraucht, dann wird ebenfalls eine SGC erzwungen.
Haben alle VMs zu dem SGC beigetragen, ist der Zyklus beendet und der SGC hat wieder den Zustand Inaktiv, der Status der VMs ist Neutral.
Implementierung der Shared Garbage Collection
Jedes Objekt im Shared Pool hat ein so genanntes Schwarz/Weiß Flag. Die erste VM, die mit einem (lokalen) Full GC den SGC Zyklus einleitet, setzt bei allen Objekten das Flag auf Weiß. Danach markiert sie die Objekte, die sie in ihrem lokalen Heap referenziert mit einem schwarzen Flag. Jede weitere VM, die zum SGC beiträgt, markiert ebenfalls Ihre Objekte mit einem schwarzen Flag. Auch Objekte, die während eines Zyklus neu angelegt werden, bekommen ein schwarzes Flag. Nachdem die letzte VM zum SGC beigetragen hat, werden die verbleibenden Objekte mit weißen Flag gelöscht (da sie von keiner VM mehr referenziert werden) und der von ihnen genutzte Speicherplatz im Shared Memory freigegeben.
Die möglichen Zustände des SGC sind unter VM Übersicht: allgemeine Informationen beschrieben.
Die möglichen Zustände der VMs sind unter VM Übersicht: Tabelle der VMs beschrieben.
Informationen zur VMC-Speicherverwaltung finden Sie unter Memory Management im VM Container.