Ich habe ein Problem mit einer Java-Anwendung, die unter Linux läuft.
Wenn ich die Anwendung mit der standardmäßigen maximalen Heap-Größe (64 MB) starte, sehe ich anhand der Tops-Anwendung, dass der Anwendung 240 MB virtueller Speicher zugewiesen sind. Dies führt zu einigen Problemen mit anderer Software auf dem Computer, die relativ ressourcenbeschränkt ist.
Der reservierte virtuelle Speicher wird sowieso nicht verwendet, soweit ich das verstehe, denn sobald wir das Heap-Limit erreichen, wird ein OutOfMemoryError
geworfen wird. Ich habe dieselbe Anwendung unter Windows ausgeführt und sehe, dass die Größe des virtuellen Speichers und die Heap-Größe ähnlich sind.
Gibt es eine Möglichkeit, den verwendeten virtuellen Speicher für einen Java-Prozess unter Linux zu konfigurieren?
Bearbeiten 1 : Das Problem ist nicht der Heap. Das Problem ist, dass, wenn ich einen Heap von 128 MB, zum Beispiel, immer noch Linux 210 MB virtuellen Speicher zuweist, die nicht benötigt wird, ever.**
Bearbeiten 2 : Verwendung von ulimit -v
ermöglicht die Begrenzung der Menge des virtuellen Speichers. Wenn die eingestellte Größe unter 204 MB liegt, kann die Anwendung nicht ausgeführt werden, obwohl sie nicht 204 MB, sondern nur 64 MB benötigt. Ich möchte also verstehen, warum Java so viel virtuellen Speicher benötigt. Kann dies geändert werden?
Bearbeiten 3 : Auf dem eingebetteten System laufen mehrere andere Anwendungen. Und das System hat eine Begrenzung des virtuellen Speichers (aus Kommentaren, wichtiges Detail).