# Gibt es eine JVM, die besser mit dem Speicher umgeht?



## Rock Lobster (24. Aug 2007)

Servus,

ich habe mich in letzter Zeit sehr oft darüber geärgert, wie Java mit dem RAM umgeht.
Und zwar habe ich nur die Möglichkeit, einen Maximalwert anzugeben, und sobald mehr Speicher benötigt wird, als dieser Maximalwert, kackt die VM einfach ab und fertig.

Ein "normales" natives Programm kann 4 GByte Speicher adressieren, und es ist Aufgabe des Betriebssystems, das virtuell zur Verfügung zu stellen. Dann wird halt gepaged und ausgelagert, aber immerhin kann ich mir sicher sein, daß mein Programm irgendwie mit diesen 4 GByte arbeiten kann - selbst wenn sich nur 256 MByte RAM physikalisch im Rechner befinden.

Bei Java ist das leider nicht so, sondern ich nutze eben den besagten Maximalwert. Lustigerweise kann ich hier auch keine 4 GByte angeben. Auch 2 GByte gehen nicht, obwohl ich physikalisch 2 GByte RAM besitze. Und auch 1900 MByte funktionieren nicht. Scheinbar akzeptiert die VM nur Werte, die den physikalisch vorhandenen RAM abzüglich dem gerade gebrauchten RAM nicht überschreiten. Zumindest ist das meine Vermutung. In dem Fall kann also ein Benutzer große Datenmengen nur dann verarbeiten, wenn er auch tatsächlich so viel RAM besitzt.

Da ich nicht begreife, warum sich die VM da so sehr selbst einschränkt, hoffe ich, daß es andere VMs gibt, die in dieser Hinsicht besser sind (und die vollen 4 GByte nutzen können). Kennt ihr da welche, bei denen das wie gewünscht funktioniert?

Oder gibt es auch für die Sun VM eine Möglichkeit, das über bestimmte Parameter zu lösen? Bisher hab ich halt nur mit Xms und Xmx hantiert, und wie gesagt, das entspricht nicht ganz meinen Vorstellungen.


----------



## Wildcard (24. Aug 2007)

Aus deinem Text schließe ich, das du ein 32 bit Windows System verwendest.
Es handelt sich nicht um ein VM Problem, sondern um schlechtes Speichermanagement von Windows.
Es wird theoretisch nur maximal die Hälfte des adressierbaren Bereichs an einen Prozess vergeben. In der Praxis wird dieser Bereich weiter verringert, was mit Windows zu einem Maximum von 1,5-1,7 GiB führt.
Wenn du mehr Speicher brauchst, nimm ein anderes Betriebssystem oder ein 64 bit System.


----------



## Rock Lobster (24. Aug 2007)

Würde das also bedeuten, daß ich auch auf einem System mit 128 MByte RAM der Java-VM ein Maximum von sagen wir 1,5 GByte zuweisen kann?


----------



## Wildcard (24. Aug 2007)

Auf einem Windows 32 bit System.
Mit Solaris 64 bit kannst du auch ein paar hundert GiB zuweisen  :wink:


----------



## Rock Lobster (24. Aug 2007)

Okay, in diesem Fall hätte sich meine Frage ja dann schon quasi erledigt. Wenn ich also Win32 benutze, dann kann ich IN JEDEM FALL 1,5 GByte zuweisen, selbst wenn der Rechner nur 16 MByte RAM haben sollte? Dann brauch ich auch gar nicht nach 'ner anderen VM zu suchen


----------



## Ice-Tea (24. Aug 2007)

Nur mal nebenbei: Windows XP 32bit kann bis zu 4GB verwalten, jedoch jedem Programm (ob Nativ oder Bytecode) nur 2GB zur verfügung stellen.
Es ist also Theoretisch unsinnig mit XP 32bit ein 4GB Arbeitsspeicher zu besitzen. Außer man möchte 3 Spiele gleichzeitig starten und mit ALT-Tab schnell herumswitchen. Ich spreche da aus erfahrung 

C&C 3 TW, BF2 und IL2 - Sturmnovik gleichzeitig? kein problem   


Fazit: Die Windows-Speicherverwaltung ist fürn hintern ...


----------



## Wildcard (24. Aug 2007)

Ice-Tea hat gesagt.:
			
		

> Nur mal nebenbei: Windows XP 32bit kann bis zu 4GB verwalten, jedoch jedem Programm (ob Nativ oder Bytecode) nur 2GB zur verfügung stellen.
> Es ist also Theoretisch unsinnig mit XP 32bit ein 4GB Arbeitsspeicher zu besitzen. Außer man möchte 3 Spiele gleichzeitig starten und mit ALT-Tab schnell herumswitchen. Ich spreche da aus erfahrung


Unsinn.
Merkst du spätestens dann, wenn du Eclipse Firefox und JBoss laufen lässt.



> Fazit: Die Windows-Speicherverwaltung ist fürn hintern ...


Da hingegen widerspreche ich nicht.


----------



## SlaterB (24. Aug 2007)

>  Außer man möchte 3 Spiele gleichzeitig starten 

gibts denn nur Spiele? für DB, WebServer und Eclipse und ähnliches würde sich doch sicher ein Bedarf finden
(edit: oh, ein Echo)


----------

