从Java8更新191或更高版本,或者Java10、11、12、13等等,我们有一个名为XX:+UseContainerSupport的选项,该选项在默认情况下是激活的,所以JVM可以读取容器内RAM和CPU的限制。通过设置-XX:MaxRAMPercentage=90.0,我可以告诉JVM我想要给HEAP多少%的可用RAM,但是其他JVM资源呢?比如GC、CodeCache、类加载、Metaspace、DirectBuffers等等。。?
JVM是否也会调整其大小(分配堆后的剩余空间)以避免超过可用RAM?或者在每种情况下我都要自己计算,如下所示:
-XX:MetaspaceSize=64m -XX:ReservedCodeCacheSize=32m -XX:CompressedClassSpaceSize=16m -Xss256k
例如,如果创建一个具有1G RAM的容器,并使用-XX:MaxRAMPercentage=90.0在其中运行JVM,那么堆将占用900m,而其他JVM的内容只有100m,那么这个100m是否会智能地分布在所有需要的资源之间,比如设置XX:MaxMetaspaceSize(默认情况下没有限制)?
-XX:MetaspaceSize=512m
-XX:MaxMetaspaceSize=512m
但是通过jstat -gcutil