Wann löst Java GC aus?
1. Speicherrecyclingstrategien und allgemeine Konzepte
Gemeinsame Speicherrecyclingstrategien können aus den folgenden Dimensionen verstanden werden:
1 Seriell und parallel
Seriell: Ein einzelner Thread führt Speicherrecyclingarbeiten durch. Es ist sehr einfach und erfordert keine Berücksichtigung von Problemen wie der Synchronisierung, dauert jedoch lange und ist nicht für mehrere CPUs geeignet.
Parallel: Mehrere Threads führen gleichzeitig Recyclingarbeiten durch. Geeignet für mehrere CPUs und hocheffizient.
2 Parallelität & Stoppen Sie die Welt
Stoppen Sie die Welt: Der Anwendungsthread im JVM bleibt hängen und nur der Garbage-Collection-Thread arbeitet daran, den Müll zu bereinigen . Ganz einfach, Probleme wie schmutziges Recycling müssen nicht berücksichtigt werden.
Parallelität: Während die Garbage Collection stattfindet, wird auch die Anwendung ausgeführt. Stellen Sie die Antwortzeit der Anwendung sicher. Es kann Situationen geben, in denen das Recycling nicht sauber ist und ein sekundäres Recycling erforderlich ist.
3 Komprimiert & Unkomprimiert &kopieren
Komprimierung: Nach der Speicherbereinigung werden die überlebenden Objekte in einen kontinuierlichen Raum verschoben, um die Fragmente zu bereinigen und sicherzustellen, dass der verbleibende Platz vorhanden ist zusammenhängend.
Unkomprimiert: Fragmente behalten und nicht komprimieren.
Kopieren: Verschieben Sie die verbleibenden Objekte in den neuen Raum und geben Sie den gesamten alten Raum frei. (Erfordert größeren Speicher.)
Ein Garbage-Collection-Algorithmus kann aus den oben genannten Dimensionen betrachtet und entworfen werden und letztendlich einen Garbage-Collector mit unterschiedlichen Eigenschaften erzeugen, der für verschiedene Szenarien geeignet ist.
2. YGC&FGC von JVM
YGC: GC, der Heap der neuen Generation. Die Häufigkeit ist relativ hoch, da die meisten Gegenstände eine kurze Lebensdauer haben und in der neuen Generation recycelt werden. Der Leistungsaufwand ist gering.
FGC: Heap-weite GC. FGC wird ausgelöst, wenn die standardmäßige Heap-Speicherplatznutzung 80 % erreicht (einstellbar). Nehmen wir als Beispiel unsere Produktionsumgebung: FGC wird im Allgemeinen selten ausgelöst, manchmal alle 10 Tage oder etwa eine Woche.
3. Wann wird YGC ausgelöst und wann wird FGC ausgelöst?
● Zeitpunkt von YGC:
Unzureichender Edn-Speicherplatz
● Timing von FGC:
Unzureichender alter Speicherplatz
3 usw. Timing-Trigger;
4. Live-Speicherinformationen ausgeben (jmap –dump:live).
Für den Auslösezeitpunkt von YGC ist es ziemlich offensichtlich, dass nicht genügend Platz im Eden vorhanden ist. Zu diesem Zeitpunkt wird ygc definitiv ausgelöstFür Auslösendes Timing von FGC, alt Unzureichender Speicherplatz, unzureichender Perm-Speicherplatz und der Aufruf von system.gc() sind relativ offensichtlich. In diesem Fall wird GC im Allgemeinen ausgelöst.
Die komplizierteste ist die sogenannte pessimistische Strategie. Der Mechanismus, den sie auslöst, besteht darin, dass sie zunächst die durchschnittliche Größe der vorherigen Beförderung berechnet, also von der neuen Generation bis zur durchschnittliche Größe der neuen Generation. Wenn der verbleibende Speicherplatz in der alten Generation kleiner als die Heraufstufungsgröße ist, wird ein FullGC ausgelöst. Die von SDK in Betracht gezogene Strategie besteht darin, dass aus durchschnittlicher und langfristiger Sicht die Wahrscheinlichkeit eines unzureichenden Werberaums beim nächsten Mal sehr hoch ist. Anstatt bis dahin auf fullGC zu warten, ist es besser, pessimistisch zu glauben, dass FullGC beim nächsten Mal definitiv ausgelöst wird und führen Sie FullGC zuerst direkt aus. Und durch den tatsächlichen Nutzungsprozess wurde auch eine relativ stabile Wirkung erzielt. php Chinesische Website, eine große Anzahl kostenloser
Java-Einführungs-Tutorials, willkommen zum Online-Lernen!
Das obige ist der detaillierte Inhalt vonWann löst Java gc aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!