Schließlich!
Ab Java 8u191 haben Sie jetzt folgende Möglichkeiten:
-XX:InitialRAMPercentage
-XX:MaxRAMPercentage
-XX:MinRAMPercentage
Dies kann verwendet werden, um den Heap als Prozentsatz des verwendbaren physischen RAM zu dimensionieren. (Dies entspricht dem RAM, der weniger installiert ist, als der Kernel verwendet).
Siehe Release Notes für Java8 U191 für weitere Informationen. Beachten Sie, dass die Optionen unter einer Docker-Überschrift aufgeführt sind. Sie gelten jedoch unabhängig davon, ob Sie sich in einer Docker-Umgebung oder in einer herkömmlichen Umgebung befinden.
Der Standardwert für MaxRAMPercentage
ist 25%. Das ist äußerst konservativ.
Meine eigene Regel: Wenn Ihr Host mehr oder weniger der Ausführung der angegebenen Java-Anwendung gewidmet ist, können Sie ohne Probleme dramatisch zunehmen. Wenn Sie unter Linux arbeiten, nur Standard-Daemons ausführen und RAM von etwa 1 GB und mehr installiert haben, würde ich ohne zu zögern 75% für den Heap der JVM verwenden. Denken Sie auch hier daran, dass 75% des verfügbaren Arbeitsspeichers und nicht der installierte Arbeitsspeicher vorhanden sind . Was bleibt, sind die anderen Benutzerlandprozesse, die möglicherweise auf dem Host ausgeführt werden, und die anderen Speichertypen, die die JVM benötigt (z. B. für den Stapel). Alles in allem passt dies normalerweise gut zu den verbleibenden 25%. Mit noch mehr installiertem RAM sind die 75% natürlich eine sicherere und sicherere Wette. (Ich wünschte, die JDK-Leute hätten eine Option implementiert, bei der Sie eine Leiter angeben könnten.)
Das Einstellen der MaxRAMPercentage
Option sieht folgendermaßen aus:
java -XX:MaxRAMPercentage=75.0 ....
Beachten Sie, dass diese Prozentwerte vom Typ 'double' sind und Sie sie daher mit einem Dezimalpunkt angeben müssen . Sie erhalten einen etwas merkwürdigen Fehler, wenn Sie "75" anstelle von "75.0" verwenden.