Heim > Java > javaLernprogramm > Wie kann ich JVM-Speicher in Java zuweisen und verwalten?

Wie kann ich JVM-Speicher in Java zuweisen und verwalten?

青灯夜游
Freigeben: 2018-10-22 17:37:44
nach vorne
3870 Leute haben es durchsucht

Der Inhalt dieses Artikels besteht darin, vorzustellen, wie JVM-Speicher in Java zugewiesen und verwaltet wird. Lassen Sie alle den Garbage-Collection-Algorithmus der JVM und den Speicherzuweisungsmechanismus der JVM verstehen. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.

1. Garbage-Collection-Algorithmus

  • Speicherzuweisungsmechanismus in JVM

    Der Garbage-Collection-Algorithmus verfügt über einen Mark-Sweep-Algorithmus, Mark -Sammelalgorithmus und Kopieralgorithmus verwenden den von der JVM zugewiesenen Speicherraum. Der Generationssammelalgorithmus ist in das Speichermodell der neuen Generation unterteilt Algorithmus, die alte Generation verwendet den Mark-Sort-Algorithmus. Lassen Sie uns die spezifischen Ideen des Garbage-Collection-Algorithmus untersuchen.

  • Mark-Clear-Algorithmus:
    Der Mark-Clear-Algorithmus ist in zwei Phasen unterteilt: Markieren und Löschen. Markieren Sie zunächst den Speicherplatz, der nach der Markierung recycelt werden muss Ist der Vorgang abgeschlossen, werden alle markierten Speicherplätze einheitlich recycelt. Dafür gibt es zwei Hauptgründe: 1. Die Markierungs- und Räumeffizienz ist nicht hoch. 2. Nach dem Löschen des Objektraums wird eine große Anzahl diskontinuierlicher Speicherfragmente generiert, was dazu führt, dass die Speicherbereinigung aufgrund unzureichenden Speichers im Voraus ausgelöst wird, wenn große Objekte (Objekte, die viel kontinuierlichen Speicher erfordern) neu zugewiesen werden. Der Recyclingprozess ist in der folgenden Abbildung dargestellt.

Wie kann ich JVM-Speicher in Java zuweisen und verwalten?

  • Kopieralgorithmus
    Der Kopieralgorithmus teilt die Speicherkapazität in zwei gleiche Blöcke auf, wobei jeweils ein Block verwendet wird Speicher: Wenn dieser Speicher aufgebraucht ist, kopieren Sie die verbleibenden Objekte in diesem Speicher in einen anderen Speicher, löschen Sie dann diesen Speicherplatz und weisen Sie das nächste Objekt einem anderen Speicherplatz zu, dh es werden Objekte gespeichert. Die beiden Speicherplätze werden abwechselnd verwendet . Der JVM-Heapspeicher der neuen Generation ist in den Eden-Raum, den Survivor-Space und den Survivor-Space unterteilt. Das standardmäßige Verhältnis von Eden- und Survivor-Speicherplatz beträgt 8:1, wobei Eden 80 % ausmacht, von und zu jedem Konto 10 % und der Speicherplatz, der von allen Speichern der neuen Generation genutzt werden kann, 90 % beträgt. In der neuen Generation wird bei jeder Speicherbereinigung eine große Anzahl von Objekten gesammelt, sodass nur wenige überlebende Objekte kopiert werden müssen. Das Folgende ist der Betriebsprozess des Kopieralgorithmus:

Wie kann ich JVM-Speicher in Java zuweisen und verwalten?

  • Markierungsorganisationsalgorithmus:
    Der Kopieralgorithmus hat eine höhere Überlebensrate von Objekten. Die Verwendung in hohen Einstellungen ist nicht einfach, da eine große Anzahl lebender Objekte kopiert werden muss. Noch wichtiger ist, dass der Kopieralgorithmus etwas Platz verschwendet. Da die alte Generation einige Objekte mit relativ langer Lebensdauer speichert, ist die Verwendung des Replikationsalgorithmus nicht geeignet. Gemäß den Merkmalen der alten Ära wurde der Mark-Sort-Algorithmus entwickelt. Der Mark-Compact-Algorithmus markiert zunächst die überlebenden Objekte, verschiebt sie dann an ein Ende und gibt dann den Objektspeicher außerhalb der Endgrenze frei. Der Ausführungsprozess des Mark-Collation-Algorithmus ist wie folgt:

Wie kann ich JVM-Speicher in Java zuweisen und verwalten?

2. Speicherzuweisungs- und Recyclingstrategie
Was im Java-Technologiesystem enthalten ist Die befürwortete automatische Speicherverwaltung kann letztendlich auf die automatische Zuweisung von Speicher zu Objekten und die Rückgewinnung des den Objekten zugewiesenen Speichers zurückgeführt werden. In Bezug auf die Speicherwiederherstellung können Sie sich auf den oben genannten Garbage-Collection-Algorithmus beziehen. Die JVM verwendet einen Generations-Garbage-Collection-Algorithmus, der in die neue Generation und die alte Generation unterteilt ist Die Generierung verwendet den Mark-Sort-Algorithmus. Werfen wir einen Blick auf die Speicherzuweisungsstrategie der JVM:

  • Objekte werden zuerst im Eden-Bereich zugewiesen.
    In den meisten Fällen werden Objekte im Eden-Bereich der neuen Generation zugewiesen. Wenn im Eden-Bereich nicht genügend Speicherplatz vorhanden ist, initiiert die virtuelle Maschine einen Minor GC (New Generation GC), um tote Objekte im Survivor-Bereich zu recyceln Wenn genügend Platz vorhanden ist, wird der Speicher durch die Platzzuteilungsgarantie direkt in der alten Generation hinterlegt. Speichern Sie das Objekt dann im Eden-Bereich.

  • Große Objekte gelangen direkt in die alte Generation
    Große Objekte beziehen sich auf Objekte, die viel kontinuierlichen Speicherplatz benötigen. Die typischsten großen Objekte sind sehr lange Zeichenfolgen und sehr lange Arrays . . Große Objekte sind eine schlechte Nachricht für die Speicherzuweisung virtueller Maschinen. Das häufige Auftreten großer Objekte kann leicht die Speicherbereinigung im Voraus auslösen und kontinuierlichen Speicherplatz zum Speichern großer Objekte generieren, wenn noch viel Speicherplatz vorhanden ist. Die schlimmste Situation bei kleinen Objekten besteht darin, auf eine Gruppe „kurzlebiger“ großer Objekte zu stoßen, die beim Schreiben von Programmen vermieden werden sollten.

  • Langfristig überlebende Objekte gelangen in die alte Generation
    Da die virtuelle Maschine die Idee der Generationensammlung zur Speicherverwaltung übernimmt, muss die virtuelle Maschine wissen, welche Objekte in der platziert werden sollen neue Generation und welche Objekte in die neue Generation eingeordnet werden sollen. Die virtuelle Maschine gibt jedem Objekt einen Alterszähler. Wenn dieses Objekt im Eden-Bereich einen Minor GC erlebt hat und im Survivor-Bereich gespeichert ist, beträgt das Alter dieses Objekts 1. Jedes Mal, wenn es einen Minor GC überlebt, erhöht sich das Alter des Objekts um 1. Wenn sein Alter auf a steigt Auf einer bestimmten Ebene (der Standardwert ist 15 Jahre) wird es auf die alte Generation hochgestuft.

  • Dynamische Bestimmung des Objektalters
    Um sich besser an die Speicherbedingungen verschiedener Programme anzupassen, lässt die virtuelle Maschine Objekte nicht immer erst dann zu, wenn das Alter des Objekts erreicht ist Wenn in der alten Generation der Gesamtspeicher von Objekten gleichen Alters im Überlebensraum größer als die Hälfte des Speichers im Überlebensraum ist, gelangen Objekte, die größer oder gleich diesem Alter sind, in die alte Generation.

  • Speicherzuweisungsgarantie
    Die alte Generation garantiert die Speicherzuweisung der neuen Generation. Das heißt, vor der Durchführung von Minor GC prüft die virtuelle Maschine zunächst die maximale Kontinuität Ist der verfügbare Speicherplatz der alten Generation größer oder gleich dem Gesamtspeicherplatz aller Objekte der neuen Generation, bedeutet dies, dass der Minor GC dieses Mal sicher ist, da nach dem Minor GC, die Objekte der neuen Generation können in der alten Generation gespeichert werden (wenn der verbleibende Speicherplatz nach dem Minor GC verloren geht Wenn der Speicher nicht ausreicht). Wenn diese Bedingung nicht zutrifft, prüft die virtuelle Maschine, ob die HandlePromotionFailure-Einstellung dies zulässt Wenn dies zulässig ist, prüft die virtuelle Maschine, ob der maximal verfügbare Speicherplatz in der alten Generation größer ist als die durchschnittliche Größe der zur alten Generation hochgestuften Objekte Führen Sie einen Minor GC durch. Wenn ein Garantieversagen nicht zulässig ist, wird eine vollständige GC (Old Generation GC) durchgeführt, um den Speicherplatz toter Objekte in der alten Generation zurückzugewinnen, damit die alte Generation mehr Speicherplatz freigeben kann.

Das obige ist der detaillierte Inhalt vonWie kann ich JVM-Speicher in Java zuweisen und verwalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
jvm
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage