Dieser Artikel ist eine detaillierte Analyse und Einführung in das Problem der eclipse.ini-Speichereinstellungen. Freunde in Not können sich darauf beziehen
-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
Hier gibt es mehrere Fragen:
1 Was bedeutet jedes? Parameter?
2. Warum kann Eclipse auf einigen Maschinen starten, nachdem ich sowohl -Xmx als auch -XX:MaxPermSize auf 512M gesetzt habe, aber auf einigen Maschinen nicht?
3. Warum führt Eclipse beim Schreiben der oben genannten Parameter in die Datei eclipse.ini nicht die entsprechenden Einstellungen durch?
Beantworten wir sie einzeln
1 Was bedeuten die einzelnen Parameter?
-vmargs im Parameter bedeutet das Festlegen von JVM-Parametern. Im Folgenden handelt es sich also tatsächlich um JVM-Parameter. Wir verstehen zunächst den Mechanismus der JVM-Speicherverwaltung und erklären dann die Bedeutung jedes Parameters.
Heap- und Nicht-Heap-Speicher
Gemäß der offiziellen Aussage: „Die Java Virtual Machine verfügt über einen Heap. Der Heap ist der Laufzeitdatenbereich, und der Speicher aller Klasseninstanzen und Arrays wird von hier aus zugewiesen.“ Der Heap wird beim Start der Java Virtual Machine erstellt. „Der Speicher außerhalb des Heaps in der JVM wird als Nicht-Heap-Speicher bezeichnet.“ Es ist ersichtlich, dass die JVM hauptsächlich zwei Arten von Speicher verwaltet: Heap und Nicht-Heap. Einfach ausgedrückt ist der Heap der Speicher, auf den Java-Code zugreifen kann und der für Entwickler reserviert ist. Der Nicht-Heap ist der Speicher, der für die eigene Verwendung der JVM reserviert ist, also der Speicher, der für die interne Verarbeitung oder Optimierung des Methodenbereichs und der JVM erforderlich ist (z. B JIT-Cache für kompilierten Code), jede Klassenstruktur (z. B. der Laufzeitkonstantenpool, Feld- und Methodendaten) und der Code für Methoden und Konstruktoren befinden sich alle im Off-Heap-Speicher.
Heap-Speicherzuweisung
Der von der JVM zugewiesene anfängliche Speicher wird durch -Xms angegeben, und der Standardwert ist 1/64 des von der JVM zugewiesenen maximalen Speichers, der durch -Xmx angegeben wird beträgt 1/4 des physischen Speichers. Wenn der freie Heap-Speicher weniger als 40 % beträgt, erhöht die JVM den Heap standardmäßig bis zur Höchstgrenze von -Xmx. Wenn der freie Heap-Speicher größer als 70 % ist, reduziert die JVM den Heap bis zur Mindestgrenze von -Xms. Daher setzt der Server im Allgemeinen -Xms und -Xmx auf den gleichen Wert, um eine Anpassung der Heap-Größe nach jedem GC zu vermeiden.
Nicht-Heap-Speicherzuweisung
JVM verwendet -XX:PermSize, um den Anfangswert des Nicht-Heap-Speichers festzulegen. Der Standardwert ist 1/64 des physischen Speichers. XX:MaxPermSize legt die maximale Größe des Nicht-Heap-Speichers fest , der Standardwert ist 1/64 des physischen Speichers /4.
JVM-Speicherlimit (Maximalwert)
Zuallererst ist der JVM-Speicher auf den tatsächlichen maximalen physischen Speicher begrenzt (Unsinn! Haha). Unter der Annahme, dass der physische Speicher unendlich ist, hat der maximale Wert des JVM-Speichers viel was mit dem Betriebssystem zu tun hat. Vereinfacht ausgedrückt beträgt der steuerbare Speicherplatz eines 32-Bit-Prozessors zwar 4 GB, das jeweilige Betriebssystem legt jedoch eine Grenze fest. Diese Grenze liegt im Allgemeinen bei 2 GB bis 3 GB (im Allgemeinen sind es 1,5 GB bis 2 GB unter Windows-Systemen und 1,5 GB). (G-2G unter Linux-Systemen). 2G-3G), und es wird keine Einschränkungen für Prozessoren über 64 Bit geben.
2. Warum kann Eclipse auf einigen Maschinen starten, nachdem ich sowohl -Xmx als auch -XX:MaxPermSize auf 512M gesetzt habe, während auf einigen Maschinen dies nicht möglich ist?
Durch die obige Einführung in die JVM-Speicherverwaltung haben wir erfahren, dass es zwei Arten von JVM-Speicher gibt: Heap-Speicher und Nicht-Heap-Speicher. Darüber hinaus hängt der maximale Speicher von JVM zunächst vom tatsächlichen physischen Speicher und dem Betriebssystem ab. Daher das Festlegen von VM-Parametern führt hauptsächlich aus folgenden Gründen dazu, dass das Programm nicht gestartet werden kann:
1) Der Wert von -Xms im Parameter ist größer als -Xmx, oder der Wert von - XX:PermSize ist größer als -XX :MaxPermSize;
2) Die Summe der Werte von -Xmx und -XX:MaxPermSize überschreitet die maximale Grenze des JVM-Speichers, z. B. die maximale Speichergrenze des aktuellen Betriebssystems, oder tatsächlicher physischer Speicher usw. Apropos tatsächlicher physischer Speicher: Wenn Ihr Speicher 1024 MB groß ist, werden möglicherweise nicht 1024 MB im tatsächlichen System verwendet, da ein Teil davon von der Hardware belegt ist.
3. Warum führt Eclipse beim Schreiben der oben genannten Parameter in die Datei eclipse.ini nicht die entsprechenden Einstellungen durch?
Warum ist dann derselbe Parameter in der Verknüpfung oder Befehlszeile gültig, aber in der Datei eclipse.ini ungültig? Dies liegt daran, dass wir die Einstellungsregeln der Datei eclipse.ini nicht befolgt haben:
Die Parameter haben die Form „Elementwert“. Wenn in der Mitte Leerzeichen vorhanden sind, müssen sie in eine neue Zeile geschrieben werden. Wenn der Wert Leerzeichen enthält, müssen diese in doppelte Anführungszeichen gesetzt werden. Zum Beispiel verwenden wir den Parameter -vm C:Javajre1.6.0binjavaw.exe, um die virtuelle Maschine einzurichten. In der Datei eclipse.ini sollte er wie folgt geschrieben werden:
-vm
C :Javajre1.6.0binjavaw.exe
Wie oben erwähnt, können die endgültigen Parameter in eclipse.ini wie folgt geschrieben werden:
-vmargs
-Xms128M
-Xmx512M
-XX :PermSize=64M
-XX :MaxPermSize=128M
Die tatsächlichen Laufergebnisse können über die Schaltfläche „Konfigurationsdetails“ im Fenster „Hilfe“ – „Über Eclipse SDK“ in Eclipse angezeigt werden.
Es sollte auch beachtet werden, dass der Inhalt der eclipse.ini-Datei, die mit dem komprimierten Eclipse-Paket geliefert wird, wie folgt lautet:
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
-vmargs
-Xms40m
-Xmx256m
Darunter haben die Parameter –launcher.XXMaxPermSize (beachten Sie, dass es vorne zwei Verbindungslinien gibt) und -XX:MaxPermSize grundsätzlich die gleiche Bedeutung Ich denke, der einzige Unterschied besteht darin, dass ersterer der Parameter ist, der beim Start von eclipse.exe festgelegt wird, während letzterer der Parameter in der von Eclipse verwendeten JVM ist. Legen Sie einfach eine der beiden fest, sodass Sie hier –launcher.XXMaxPermSize und die nächste Zeile mit # auskommentieren können.
3. Andere Startparameter. Wenn Sie eine Dual-Core-CPU haben, können Sie diesen Parameter ausprobieren:
-XX:+UseParallelGC
, um die GC-Ausführung zu beschleunigen. (Nur ein neu hinzugefügter Parameter für GC in JDK 5)
Das obige ist der detaillierte Inhalt vonBeispielanalyse von Speicherproblemen bei der Konfiguration von eclipse.ini in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!