基础知识
case
常用参数
-Xms
初始化大小内存,默认为物理内存1/64
等价于-XX:InitialHeapSize
-Xmx
最大分配内存,默认物理内存的1/4
等价于-XX:MaxHeapSize
-Xss
设置单个线程栈的大小,一般默认为512K~1024K
等价于-XX:ThreadStackSize
- -XX:ThreadStackSize = 0 , 表示使用默认512K~1024K
- -XX:ThreadStackSize != 0 , 表示使用自己设置的
-Xmn
设置年轻代大小,一般不需要改动
-Xms128m -Xmx4096m -Xss1024k -XX:MetaSpaceSize=512m -XX:+PrintCommandFlags -XX:+PrintGCDetails -XX:+UseSerialGC
-XX:MetaspaceSize
元空间的本质和永久代类似,都是对JVM规范中方法区的实现。
不过元空间与永久代之间最大的区别在于:
- 永久代在堆里面
- 元空间并不在虚拟机中,而是使用本地内存。
因此,在默认情况下,元空间的大小仅受本地内存限制
eg:
Xms10m -Xmx10m -XX:MetaspaceSize=1024m -XX:+PrintFlagsFinal
初始值约21M,也就是说只占用本地内存的21M,如果你频繁的new对象,有可能就会把元空间撑爆从而发生元空间异常,因此需要调大一些
-XX:+PrintGCDetails
GC
FullGC
-XX:SurvivorRatio (了解)
-XX:NewRatio (了解)
-XX:MaxTenuringThreshold (了解)
设置垃圾的最大年龄
jvm典型配置案例
-Xms128m -Xmx4096m -Xss1024k -XX:MetaspaceSize=512m -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseSerialGC
输出结果
-XX:InitialHeapSize=134217728
-XX:MaxHeapSize=4294967296
-XX:MetaspaceSize=536870912
-XX:+PrintCommandLineFlags
-XX:+PrintGCDetails
-XX:ThreadStackSize=1024
-XX:+UseCompressedClassPointers
-XX:+UseCompressedOops
-XX:-UseLargePagesIndividualAllocation
-XX:+UseSerialGC
HelloGC
Heap
def new generation total 39296K, used 2796K [0x00000006c0000000, 0x00000006c2aa0000, 0x0000000715550000)
eden space 34944K, 8% used [0x00000006c0000000, 0x00000006c02bb048, 0x00000006c2220000)
from space 4352K, 0% used [0x00000006c2220000, 0x00000006c2220000, 0x00000006c2660000)
to space 4352K, 0% used [0x00000006c2660000, 0x00000006c2660000, 0x00000006c2aa0000)
tenured generation total 87424K, used 0K [0x0000000715550000, 0x000000071aab0000, 0x00000007c0000000)
the space 87424K, 0% used [0x0000000715550000, 0x0000000715550000, 0x0000000715550200, 0x000000071aab0000)
Metaspace used 3084K, capacity 4496K, committed 4864K, reserved 1056768K
class space used 335K, capacity 388K, committed 512K, reserved 1048576K
- -XX:+UseSerialGC : 串行垃圾回收器
- -XX:+UseParalleGC :并行垃圾回收器