参考:最佳:Java for - DZone Java
长话短说
-XX:, -XX:-XX:, -XX:-Xmx
应该如何使用呢?
1 -XX:、-XX::支持的版本:仅Java 8 131到Java 8 190
限制:
同时需要设置参数-XX:+ -XX:+,表示JVM会根据容器的内存设置来分配最大堆内存。 否则,将根据主机的内存分配最大堆内存。 -XX:只能识别整数。 设置,如果设置了-XX:=2.5,JVM将无法启动。 后续的JDK版本将不再支持。
例子:
如果容器分配1GB内存并设置-XX:=2,则JVM的最大堆内存分配约为最大可用内存的1/2(约512G)。
2 -XX:、-XX:支持的版本:Java 8 191及以上版本。
-XX:+ 该参数在这些支持的版本中已经默认启用,不需要显示。
限制:不支持旧版本
例子:
如果容器分配1GB内存并设置-XX:=50,则最大JVM堆为1GB*50%
3-Xmx:
直接设置JVM的最大堆内存值
支持版本:全部
限制:
如果直接使用-Xmx设置最大堆内存,当JVM内存超过容器的内存限制时,就会遇到OOM或者直接被kill掉。 实用建议:无论你如何设置最大堆内存,记住至少留出25%或更多的内存。 ,因为JVM运行时不仅有堆内存,还有各个线程的堆栈、本地内存等内存消耗。 如果容器中只有一个Java应用程序运行,请将初始堆大小和最大堆大小设置为相同,以避免JVM扩展。 导致 JVM 暂停。如果初始内存设置的内存超过容器限制,JVM 甚至不会启动,从而在第一时间发现问题