Erhöhen Sie die Heap-Größe in Java


276

Ich arbeite an einem Windows 2003-Server (64-Bit) mit 8 GB RAM. Wie kann ich den maximalen Heapspeicher erhöhen? Ich benutze das -Xmx1500mFlag, um die Heap-Größe auf 1500 Mb zu erhöhen. Kann ich den Heapspeicher auf 75% des physischen Speichers (6 GB Heap) erhöhen?


2
Hast du es versucht -Xmx6g? Hat das nicht funktioniert? Was hast du beobachtet?
oxbow_lakes

2
Ich nehme an, Sie haben versucht, den Haufen zu vergrößern, sind aber gescheitert? Verwenden Sie eine 64-Bit-JVM?
Bart Kiers

Vielen Dank für den Kommentar, aber das funktioniert nicht
Sunil

Woher weißt du, dass es nicht funktioniert? Startet die JVM nicht?
oxbow_lakes

Antworten:


327

Sie können auf einem 32-Bit-System auf 4 GB erhöhen. Wenn Sie auf einem 64-Bit-System arbeiten, können Sie höher gehen. Kein Grund zur Sorge, wenn Sie falsch gewählt haben. Wenn Sie auf einem 32-Bit-System nach 5 g fragen, beschwert sich Java über einen ungültigen Wert und beendet das Programm.

Verwenden Sie, wie andere gepostet haben, die cmd-Zeilen-Flags - z

java -Xmx6g myprogram

Sie können eine vollständige Liste (oder zumindest eine fast vollständige Liste) erhalten, indem Sie java -X eingeben.


16
Ich habe die Erfahrung gemacht, dass die tatsächliche Heap-Größe, die Java mit einer 32b-VM akzeptiert (auf einem 32b- oder 64b-System - hier ist die VM der wichtige Teil), etwa 2 G beträgt. Außerdem hat der überraschte Fragesteller nicht zuerst gesucht und gefunden: stackoverflow.com/questions/1596009/… und: stackoverflow.com/questions/37335/…
wsorenson

2
Ah, Sie haben natürlich Recht - auf einem 32-Bit-System können Sie nur 2 GB Speicher adressieren.
Steve B.

Müssen der maximale Heap und die minimale Heap-Größe gleich sein?
user1747935

1
Nein. Aber die Leute tun dies normalerweise, weil die JVM niemals Zeit damit verschwenden kann, die Größe zu ändern. Zweifel, dass es sehr wichtig ist, TBH.
Steve B.

1
@PhilipRego Sie setzen es auf das, was Sie wollen, bis zu den Grenzen, die die JVM erreichen kann. -Xmx2G setzt Ihren Speicher auf 2G (siehe auch -Xms). Dies sagt überhaupt nichts darüber aus, wie viel Speicher Sie benötigen werden.
Steve B.

155

Es ist möglich, die von der JVM zugewiesene Heap-Größe mithilfe von Befehlszeilenoptionen zu erhöhen. Hier haben wir 3 Optionen

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size

java -Xms16m -Xmx64m ClassName

In der obigen Zeile können wir den minimalen Heap auf 16 MB und den maximalen Heap auf 64 MB festlegen


28

Auf einer 32-Bit-JVM beträgt die größte Heap-Größe, die Sie theoretisch festlegen können, 4 GB. Um einen größeren Heap zu verwenden, müssen Sie eine 64-Bit-JVM verwenden. Versuche Folgendes:

Java -Xmx6144M -d64

Das Flag -d64 ist wichtig, da dies die JVM anweist, im 64-Bit-Modus ausgeführt zu werden.


Vielen Dank, Chef, aber es funktioniert nicht in meinem System. Es gibt noch etwas, das mir fehlt
Sunil

4
Definieren Sie "funktioniert nicht". Startet es nicht und gibt Ihnen einen Fehler? Fängt es an, verwendet aber eine andere Heap-Größe?
Kevin

11

Es ist möglich, die von der JVM in Eclipse zugewiesene Heap-Größe direkt in Eclipse IDE zu erhöhen

Ausführen ----> Konfigurationen ausführen ----> Argumente

Geben Sie -Xmx1g ein (Hiermit wird die maximale Größe wie Xmx256m oder Xmx1g festgelegt ...... m -> mb g ---> gb)


3
Nur um dies hinzuzufügen, sollte dies ein VM-Argument sein (Eclipse bietet Ihnen zwei Optionen).
Matt Boyle

11

Java -d64 -Xms512m -Xmx4g HelloWorld

Dabei gilt: -d64: Aktiviert die 64-Bit-JVM -Xms512m: Legt die anfängliche Heap-Größe auf 512 MB fest. -Xmx4g: Legt die maximale Heap-Größe auf 4 GB fest (hier lautet der Name der Java-Datei: HelloWorld.java).


9

Sie können die Heap-Größe erhöhen, indem Sie die JVM-Parameter -Xms und -Xmx wie folgt übergeben :

Für Jar-Dateien:

java -jar -Xms4096M -Xmx6144M jarFilePath.jar

Für Java-Dateien:

 java -Xms4096M -Xmx6144M ClassName

Die obigen Parameter erhöhen InitialHeapSize (-Xms) auf 4 GB (4096 MB) und MaxHeapSize (-Xmx) auf 6 GB (6144 MB).

Die Heap-Größe der jungen Generation bleibt jedoch gleich, und die zusätzliche HeapSize wird der Heap-Größe der alten Generation hinzugefügt . Um die Größe der jungen Generation Heap und Alt Gen Heap entzerren , verwenden -XX: NewRatio = 1 -XX: -UseAdaptiveSizePolicy params.

java -jar -Xms4096M -Xmx6144M -XX:NewRatio=1 -XX:-UseAdaptiveSizePolicy pathToJarFile.jar

-XX: NewRatio = Heap-Größe der alten Generation: HeapSize der jungen Generation (Sie können mit diesem Verhältnis spielen, um das gewünschte Verhältnis zu erhalten).


7

Kann ich den Heap-Speicher auf 75% des physischen Speichers (6 GB Heap) erhöhen?

Ja, du kannst. In der Tat können Sie auf mehr als die Größe des physischen Speichers erhöhen, wenn Sie möchten.

Ob dies sinnvoll ist, hängt davon ab, wie viel auf Ihrem System ausgeführt wird. Insbesondere wenn der "Arbeitssatz" der Anwendungen und Dienste, die derzeit ausgeführt werden, den verfügbaren physischen Speicher erheblich überschreitet, kann Ihr System "verprügeln" und viel Zeit damit verbringen, virtuelle Speicherseiten von und zur Festplatte zu verschieben. Der Nettoeffekt ist, dass das System schrecklich langsam wird.


Vielen Dank für Ihren Kommentar, aber wie kann ich erhöhen. PLZ können Sie Befehl geben.
Sunil

Versuchen Sie -Xmx6000m. Es sollte funktionieren, wenn Sie eine 64-Bit-Version von Java verwenden.
Stephen C

3
Sind Sie sicher, dass Sie eine 64-Bit-Version von Java ausführen? Auf einem 64-Bit-Betriebssystem?
Stephen C

4

Verwenden Sie den folgenden Befehl, um die Heap-Größe auf 6 GB zu ändern

export JAVA_OPTS="-Xms6144m -Xmx6144m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m"

Wenn ich 8G-Speicher in meinem System habe und vom Task-Manager sehen kann, dass immer 70% davon verwendet werden; Ist es möglich, der Java-Heap-Größe 6G-Speicher zuzuweisen?
Reihan_amn

1
@Reihan_amn Ja und nein, wenn Sie Ihren Speicher überschreiten, wird Paging ausgeführt, das sich auf der Festplatte befindet und unglaublich langsam ist. Wenn Sie die Auslagerungsdateien überschreiten, haben Sie eine schlechte Zeit.
CodeMonkey

2

Mehrere Personen wiesen auf die spezifischen Antworten für die Heap-Größe mit den JVM-Optionen von -Xmsund hin -Xms. Ich möchte darauf hinweisen, dass dies nicht die einzige Art von Speicheroptionen für das JVM ist. Insbesondere wenn Sie Stapelüberläufe erhalten, möchten Sie die Größe des Stapels erhöhen, indem Sie eine zusätzliche Option wie hinzufügen -Xss8m.

Für dieses Problem -Xms2g -Xmx6g -Xss8mwären die JVM-Optionen von so etwas eine Lösung.

Ich teile diese Informationen, während meine Google-Suche nach einer Erhöhung des JVM-Speichers mich zu dieser Lösung führte und die Lösungen mit hoher Speicherzuweisung nicht funktionierten. Nachdem ich herausgefunden hatte, wozu die spezifischen Einstellungen dienen, konnte ich googeln, wie die Stapelgröße erhöht werden kann, und den fehlenden Parameter finden. :) Hoffe das spart anderen Zeit, da es mir eine Menge Zeit gespart hätte. :) :)


2

Dies funktioniert nur mit der 64-Bit-Version von Java. Gehen Sie zur Systemsteuerung und klicken Sie auf das Java-Symbol. Klicken Sie in dem kleinen Fenster der Java-Systemsteuerung auf die Java-Menüleiste und dann auf die viewSchaltfläche.

Wenn Sie über zwei Java-Plattformen verfügen, deaktivieren Sie die vorherige Java-Version, klicken Sie auf das Textfeld Laufzeitparameter und schreiben Sie -Xmx1024moder weniger als die RAM-Größe. Erhöhen Sie die Heap-Größe nicht gleich RAM, da Ihr System sonst abstürzt.


Wenn Sie die Heap-Größe auf RAM einstellen, stürzt das System nicht ab. Stattdessen beginnt das System mit dem Paging und wird schön langsam.
DaveTheMinion

0

Ja. Du kannst.

Sie können Ihren Heap-Speicher auf 75% des physischen Speichers (6 GB Heap) oder höher erhöhen.

Da Sie 64-Bit verwenden, können Sie Ihre Heap-Größe auf die gewünschte Menge erhöhen. Wenn Sie 32 Bit verwenden, ist es auf 4 GB beschränkt.

$ java -Xms512m -Xmx6144m JavaApplication

Legt fest, dass die anfängliche Heap-Größe 512 MB und die maximale Heap-Größe 6 GB beträgt.

Ich hoffe es hilft.. :)


Dies scheint den beiden Antworten, die einige Jahre zuvor veröffentlicht wurden, sehr ähnlich zu sein.
Bernhard Barker

0

Ich habe Probleme beim Ausführen der Py-Dateien in meinem Java-Code mit Eclipse / STS und erhalte PyException aufgrund unzureichenden JVM-Heap-Speichers. Ich habe die unten genannten Änderungen vorgenommen und kann dieses Problem beheben. Unten ist meine Systemkonfiguration.

Geben Sie hier die Bildbeschreibung ein

Und dies sind die Änderungen, die ich in meinem Arbeitsbereich vorgenommen habe, und voila, es läuft jetzt perfekt.

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.