Frage

Ich habe eine ziemlich Speicher hungrig Java-Anwendung. Auf meinen 32-Bit-Systemen mit Windows XP Professional wird die Anwendung nur gut laufen, wenn ich gebe es -Xmx1280m. Alles unten wird in einer java.lang.OutOfMemoryError: Java heap space Ausnahme enden.

Wenn ich die gleiche Anwendung auf einem 64-Bit-Windows XP Professional (alles andere genau das gleiche) führen Sie es erfordert -Xms1400m die OutOfMemory Zustand zu verhindern.

Zu meinem Verständnis, wenn ich ein C-Programm haben, und ich kompilieren es für 32-Bit und 64-Bit-der 64-Bit-Version wird mehr Speicher benötigen, weil Zeiger sind breiter und so weiter. In meinem Java-Beispiel aber die virtuelle Maschine (Sun) ist die gleiche und die Bytecode ist das gleiche.

Warum ist es auf den 64-Bit-Maschinen mehr Speicher benötigen?

War es hilfreich?

Lösung

Wahrscheinlich, weil die virtuelle Maschine Implementierung unterscheidet zwischen 32/64 Bit-Architektur in einer Weise, dass es mehr Speicher (breitere Typen, verschiedene GC).

verbraucht

Der Bytecode ist irrelevant, wenn es zu den Aufgaben des zugrunde liegenden System übergibt. Ich bin nicht sicher, dass Java und speichereffizient sind zwei Begriffe, würde ich zusammen sowieso setzen: P

Andere Tipps

Auch wenn Ihr Bytecode gleich ist, wandelt die JVM, dass in Maschinencode, so hat es die gleichen Gründe wie C einen größeren Speicherbedarf erforderlich ist.

Es ist der gleiche Grund, warum Sie bereits für das C-Programm aufgeführt. Das 64-Bit-System nutzt große Speicheradressen, so dass es „leakier“ zu sein (ich glaube, das ist der Begriff, den ich gehört habe es zu beschreiben).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top