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.
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.