Dieser Artikel bietet eine detaillierte Analyse und Einführung in die 10 wichtigsten Punkte des Java-Heapspeichers. Freunde, die ihn benötigen, können darauf verweisen
10 Punkte Java-Heap-Speicher.
javaoutofmemoryerrorgenerationjvmprofiler-Programmierung Als ich anfing, Java-Programmierung zu lernen, wusste ich nicht, was Heap-Speicher oder Heap-Speicherplatz ist, ich wusste es sogar nicht Ich weiß nicht, wo die Objekte platziert werden, wenn sie erstellt werden. Als ich anfing, einige formale Programme zu schreiben, stieß ich oft auf java.lang.outOfMemoryError-Fehler und begann dann, darauf zu achten, was Heap-Speicher oder Heap-Speicherplatz ist. Die meisten Programmierer haben diesen Prozess erlebt, weil es sehr einfach ist, eine Sprache zu lernen, aber es ist sehr schwierig, die Grundlagen zu erlernen, da es keinen spezifischen Prozess gibt, mit dem Sie alle Grundlagen des Programmierens erlernen und das Geheimnis des Programmierens entdecken können.
Für Programmierer ist es sehr wichtig, den Heap-Speicherplatz zu kennen, den Heap-Speicherplatz einzurichten, outOfMemoryError-Fehler im Heap-Speicherplatz zu behandeln und den Heap-Dump zu analysieren. Dieses Tutorial zum Java-Heap ist für meinen Bruder, der gerade angefangen hat, Programmieren zu lernen. Natürlich ist es möglicherweise nicht so hilfreich, wenn Sie die Grundlagen kennen oder wissen, was unter der Haube vor sich geht. Wenn Sie nicht wissen, dass das Objekt im Heap erstellt wird, werden Sie nicht erkennen, dass der OutOfMemoryError im Heap-Bereich auftritt. Ich habe mein Bestes getan, um alles aufzuschreiben, was ich über Heaps weiß, und ich hoffe, dass Sie so viel wie möglich beitragen und Ihr Wissen teilen können, damit andere davon profitieren können.
Was ist Heap-Speicherplatz in Java?
Wenn ein Java-Programm ausgeführt wird, erhält die JVM etwas Speicher vom Betriebssystem. Die JVM verwendet diesen Speicher, und ein Teil dieses Speichers ist Heap-Speicher. Der Heap-Speicher befindet sich normalerweise unten an der Speicheradresse und ist nach oben angeordnet. Wenn ein Objekt mit dem Schlüsselwort new oder auf andere Weise erstellt wird, erhält das Objekt Speicher vom Heap. Wenn das Objekt nicht mehr verwendet wird und als Müll gesammelt wird, wird der Speicher in den Heap-Speicher zurückgeführt. Um mehr über die Garbage Collection zu erfahren, lesen Sie „Funktionsweise der Garbage Collection in Java“.
So erhöhen Sie den Java-Heap-Speicherplatz
Auf den meisten 32-Bit-Maschinen und der JVM von Sun beträgt die Standardgröße des Java-Heap-Speicherplatzes 128 MB, es gibt jedoch Ausnahmen, z Auf dem 32-Bit-Solaris-Betriebssystem (SPARC-Plattformversion) betragen der standardmäßige maximale Heap-Speicherplatz und die anfängliche Heap-Speicherplatzgröße -Xms=3670 KB und -Xmx=64 MB. Bei 64-Bit-Betriebssystemen erhöht sich die allgemeine Heap-Speicherplatzgröße um etwa 30 %. Wenn Sie jedoch den Durchsatz-Garbage Collector von Java 1.5 verwenden, beträgt die standardmäßige maximale Heap-Größe ein Viertel des physischen Speichers und die anfängliche Heap-Größe beträgt ein Sechzehntel des physischen Speichers. Um die Standard-Heap-Größe zu erfahren, können Sie ein Programm mit den Standardeinstellungsparametern öffnen und JConsole (unterstützt nach JDK 1.5) verwenden, um es anzuzeigen. Sie können die maximale Heap-Größe auf der Seite „VM-Übersicht“ sehen.
Mit dieser Methode können Sie die Heap-Speichergröße entsprechend den Anforderungen Ihres Programms ändern. Ich empfehle dringend, diese Methode anstelle des Standardwerts zu verwenden. Wenn Ihr Programm groß ist und viele Objekte erstellt werden müssen, können Sie die Größe des Heap-Speichers mit den beiden Parametern -Xms und -Xmx ändern. Xms stellt die anfängliche Heap-Speichergröße dar und Xmx stellt die maximale Heap-Speichergröße dar. Es gibt auch einen Parameter -Xmn, der die Größe der neuen Generation angibt (wird später erwähnt). Beachten Sie, dass Sie die Größe des Heap-Speichers nicht beliebig ändern können, sondern nur beim Starten der JVM festlegen können.
Heap- und Garbage-Collection
Wir wissen, dass Objekte im Heap-Speicher erstellt werden, und die Garbage-Collection ist ein Prozess, der tote Objekte aus dem Heap-Speicher löscht und Entfernt diese. Der Speicher wird dann an den Heap zurückgegeben. Um vom Garbage Collector verwendet zu werden, ist der Heap hauptsächlich in drei Bereiche unterteilt, die als New Generation, Old Generation oder Tenured Generation bezeichnet werden. Der Perm-Speicherplatz für neu erstellte Objekte wird verwendet, wenn Objekte vorhanden sind erstellt. Wenn sie noch längere Zeit verwendet werden, werden sie vom Garbage Collector in die alte Generation (oder Tenured Generation) verschoben. Im Perm-Bereich speichert die JVM Metadaten wie Klassen, Methoden, String-Pools und Details auf Klassenebene. Weitere Informationen zum Heap und zur Garbage Collection finden Sie unter „Funktionsweise der Garbage Collection in Java“.
OutOfMemoryError im Java Heap
Beim Start der JVM wird der durch den Parameter -Xms festgelegte Speicher verwendet. Während das Programm fortgesetzt wird und weitere Objekte erstellt werden, beginnt die JVM, den Heap-Speicher zu erweitern, um mehr Objekte aufzunehmen. Die JVM verwendet auch den Garbage Collector, um Speicher zurückzugewinnen. Wenn der durch -Xmx festgelegte maximale Heap-Speicher fast erreicht ist und neuen Objekten kein Speicher mehr zugewiesen werden kann, löst die JVM einen java.lang.outofmemoryerror aus und Ihr Programm stürzt ab. Vor dem Auslösen von OutOfMemoryError versucht die JVM, den Garbage Collector zu verwenden, um genügend Speicherplatz freizugeben. Wenn jedoch festgestellt wird, dass immer noch nicht genügend Speicherplatz vorhanden ist, wird dieser Fehler ausgegeben. Um dieses Problem zu lösen, müssen Sie Informationen zu Ihren Programmobjekten kennen, z. B. welche Objekte Sie erstellt haben, wie viel Platz jedes Objekt einnimmt usw. Sie können einen Profiler oder Heap-Analysator verwenden, um OutOfMemoryError-Fehler zu behandeln. „java.lang.OutOfMemoryError: Java heap space“ bedeutet, dass der Heap nicht über genügend Speicherplatz verfügt und nicht weiter erweitert werden kann. „java.lang.OutOfMemoryError: PermGen space“ bedeutet, dass die permanente Generation voll ist und Ihr Programm nicht mehr in Klassen geladen oder eine Zeichenfolge zugewiesen werden kann.
Java-Heap-Dump
Heap-Dump ist eine Momentaufnahme des Java-Heap-Speichers zu einem bestimmten Zeitpunkt. Es ist sehr nützlich für die Analyse des Heap-Speichers oder den Umgang mit Speicherlecks und Java.lang.outofmemoryerror-Fehlern. Es gibt einige Tools im JDK, die Ihnen beim Abrufen von Heap-Dumps helfen können, und es gibt auch einige Tools zur Heap-Analyse, die Ihnen bei der Analyse von Heap-Dumps helfen können. Sie können „jmap“ verwenden, um Heap-Dumps abzurufen, was Ihnen beim Erstellen von Heap-Dump-Dateien hilft. Anschließend können Sie „jhat“ (Heap-Analysetool) verwenden, um diese Heap-Dumps zu analysieren. Der vom System der JVM zugewiesene Teil des Speichers.
2. Wenn wir Objekte erstellen, werden sie im Java-Heapspeicher gespeichert. 3. Um die Speicherbereinigung zu erleichtern, ist der Java-Heap-Speicherplatz in drei Bereiche unterteilt: „Neue Generation“, „Alte Generation“ oder „Tenured Generation“ und „Perm Space“.4. Xms, -Xmx, -Xmn zum Anpassen der Größe des Java-Heap-Speicherplatzes. Vergessen Sie nicht, nach der Größe „M“ oder „G“ hinzuzufügen, um die Einheit anzugeben. Sie können beispielsweise -Xmx256m verwenden, um die maximale Heap-Speichergröße auf 256 MB festzulegen.
5 Sie können JConsole oder Runtime.maxMemory(), Runtime.totalMemory(), Runtime.freeMemory() verwenden, um die Größe von Java anzuzeigen des Heap-Speichers. 6. Sie können den Befehl „jmap“ verwenden, um den Heap-Dump zu erhalten, und „jhat“ verwenden, um den Heap-Speicherplatz zu analysieren. 7 Stapel und lokale Variablen von.
8. Der Java-Garbage Collector wird verwendet, um den von toten Objekten (nicht mehr verwendeten Objekten) belegten Speicher zurückzugewinnen und ihn dann im Java-Heap-Speicher freizugeben.
9. Seien Sie nicht nervös, wenn Sie auf java.lang.outOfMemoryError stoßen. Manchmal reicht es aus, den Heap-Speicherplatz zu vergrößern. Wenn dies jedoch häufig vorkommt, müssen Sie prüfen, ob im Java-Programm ein Speicherverlust vorliegt.
10. Bitte verwenden Sie Profiler und Heap-Dump-Analysetools, um den Java-Heap-Speicherplatz anzuzeigen und zu sehen, wie viel Speicher jedem Objekt zugewiesen ist.
Das obige ist der detaillierte Inhalt vonTeilen Sie zehn wichtige Punkte des Java-Heapspeichers. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!