Ich möchte den maximalen Speicherplatz der JVM begrenzen. Beachten Sie, dass dies nicht nur der Heap ist, sondern dass ich den von diesem Prozess verwendeten Gesamtspeicher begrenzen möchte.
132
Ich möchte den maximalen Speicherplatz der JVM begrenzen. Beachten Sie, dass dies nicht nur der Heap ist, sondern dass ich den von diesem Prozess verwendeten Gesamtspeicher begrenzen möchte.
Verwenden Sie die Argumente -Xms<memory>
-Xmx<memory>
. Verwenden Sie M
oder G
nach den Zahlen, um Megs bzw. Gigs von Bytes anzuzeigen. -Xms
gibt das Minimum und -Xmx
das Maximum an.
-Xmx524M
und der Prozess nimmt 1,2 GB RAM ein. (?)Sie sollten sich keine Sorgen machen müssen, dass der Stapel Speicher verliert (dies ist höchst ungewöhnlich). Das einzige Mal, dass der Stapel außer Kontrolle geraten kann, ist eine unendliche (oder wirklich tiefe) Rekursion.
Dies ist nur der Haufen. Entschuldigung, ich habe Ihre Frage zuerst nicht vollständig gelesen.
Sie müssen die JVM mit dem folgenden Befehlszeilenargument ausführen.
Beispiel:
Dies ermöglicht maximal 1 GB Speicher für die JVM.
quelle
-XX:MaxDirectMemorySize
. Nicht, dass ich stark profiliert hätte, um sicherzugehen, aber trotzdem;)MaxDirectMemorySize
betrifft nur NIO-Puffer. Alle Arten anderer nativer Speicher werden von der JVM verwendet.Wenn Sie den Speicher für jvm (nicht die Heap-Größe) einschränken möchten, ulimit -v
In diesem hervorragenden Artikel http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the- finden Sie eine Vorstellung vom Unterschied zwischen JVM- und Heap-Speicher. java-process.html
quelle
ulimit
ein Linux-Befehl? Ich habe eine schnelle Google-Suche durchgeführt und keine Beziehung zwischenulimit
und der JVM festgestellt. YDie obige Antwort ist irgendwie richtig. Sie können nicht genau steuern, wie viel nativen Speicher ein Java-Prozess zuweist. Dies hängt davon ab, was Ihre Anwendung tut.
Abhängig von der Plattform können Sie jedoch möglicherweise einen Mechanismus verwenden, z. B. ulimit, um die Größe eines Java oder eines anderen Prozesses zu begrenzen.
Erwarten Sie nur nicht, dass es ordnungsgemäß fehlschlägt, wenn es diese Grenze erreicht. Native Speicherzuweisungsfehler sind viel schwieriger zu behandeln als Zuordnungsfehler auf dem Java-Heap. Es besteht eine ziemlich gute Chance, dass die Anwendung abstürzt, aber je nachdem, wie wichtig es für das System ist, die Prozessgröße so gering wie möglich zu halten.
quelle
Ich habe es nie benutzt. Vielleicht finden Sie es nützlich.
quelle