2009-05-26 8 views
16

Ich betreibe einen Java-Code mit dem folgenden Befehl:Vermeiden Initial Memory Heap Size Error

$ java -Xms4G -Xmx4G myjavacode 

RAM-Kapazität Meine CPU ist 6GB.

jedoch nicht immer auszuführen mir diese Fehlermeldung geben:

Invalid initial heap size: -Xms5G 
The specified size exceeds the maximum representable size. 
Could not create the Java virtual machine 

Gibt es eine Möglichkeit Java-Option einrichten, so dass wir den Code ausführen kann?

+0

Welche JVM verwenden Sie? –

+0

@roland: jdk1.6.0_14/bin/java – neversaint

+4

Sind Sie sicher, dass Sie die 64-Bit-JVM ausführen? So viel Speicher kann nicht in 32 Bit adressiert werden. – diciu

Antwort

15

Sie haben die maximale Heap-Größe Ihrer JVM überschritten. Dies ist sowohl JVM- als auch OS-abhängig. In den meisten 32-Bit-Systemen beträgt der Maximalwert unabhängig vom verfügbaren physischen Speicher 2 GB.

+3

Unter Windows 32-Bit ist die Grenze näher an 1,3 GB –

+0

Ich bekomme den Fehler 'Ungültige anfängliche Heap-Größe: -Xms256m -Xmx512m' auf einem System mit 16GB RAM (14GB frei) –

3

Tatsächlich kann die maximale Speichergröße auf 32-Bit-Systemen variieren, bis zu 4 GB, aber 2 GB ist ein allgemeiner Wert. Es ist oft möglich, den Kernel neu zu verknüpfen, um dies auf 3 oder 3,5 GB zu erhöhen. Das Problem ist natürlich, dass Sie nicht über den Adressraum verfügen, um mehr Speicher zuzuordnen. Haben Sie eine 64-Bit-Maschine ausprobiert?

Denken Sie auch daran, Ihre ulimit höher zu setzen, bevor Sie dies tun.

9

Standardmäßig wird Java im 32-Bit-Modus ausgeführt. Stellen Sie sicher, dass Sie die Option -d64 verwenden, um es in den 64-Bit-Modus zu versetzen. Sobald Sie im 64-Bit-Modus sind, sollten Sie keine Probleme haben, eine 6-GB-JVM zuzuweisen.

+2

Meinst du, dass eine 64-Bit-JVM auch läuft im 32-Bit-Modus standardmäßig? – Pacerier

+0

mein Problem wurde mit diesem Parameter -d64 auf Solaris Sparc 64bit mit einem Java (TM) SE Laufzeitumgebung (Build 1.6.0_21-b06) Java gelöst. Vielen Dank –