
Mein System meldet 8 GB, aber wenn ich versuche, 6,5 GB Heap-Speicherplatz oder sogar 4 GB für ein Java-Programm zu reservieren, schlägt dies fehl. Liegt das daran, dass ich die 32-Bit-Version installiert habe?
Heap-Zuweisung fehlgeschlagen java -Xmx3072m -jar {...}
Startet ordnungsgemäß, aber der App geht der Arbeitsspeicher aus. java -Xmx2048m -jar {...}
Antwort1
Ob Sie es glauben oder nicht, das ist eine häufig gestellte Frage. Ihre Antwort lautet alsoHier:
"Die maximale theoretische Heap-Größe für die 32-Bit-JVM beträgt 4 G. Aufgrund verschiedener zusätzlicher Einschränkungen wie verfügbarem Swap, Nutzung des Kernel-Adressraums, Speicherfragmentierung und VM-Overhead kann die Größe in der Praxis viel niedriger sein. Auf den meisten modernen 32-Bit-Windows-Systemen liegt die maximale Heap-Größe zwischen 1,4 und 1,6 G. Auf 32-Bit-Solaris-Kerneln ist der Adressraum auf 2 G begrenzt. Auf 64-Bit-Betriebssystemen, auf denen die 32-Bit-VM läuft, kann die maximale Heap-Größe höher sein und auf vielen Solaris-Systemen 4 G erreichen.
Ab Java SE 6 wird die Windows /3GB boot.ini-Funktion nicht mehr unterstützt.
Wenn Ihre Anwendung einen sehr großen Heap benötigt, sollten Sie eine 64-Bit-VM auf einer Version des Betriebssystems verwenden, die 64-Bit-Anwendungen unterstützt. Weitere Informationen finden Sie unter Von Java SE unterstützte Systemkonfigurationen.