Jvm 常见配置参数
查看命令: java -XX:+PrintCommandLineFlags -version
java8去掉了-XX:PermSize 和 -XX:MaxPermSize ,新增了 -XX:MetaSpaceSize 和 -XX:MaxMetaSpaceSize
-Xmx5g : 设置堆最大内存为5G , 大小可变化。
-Xms5g : 设置堆最小内存为5G , 大小可变化。
-Xmn2g : 设置堆中的年轻代大小为2G。整个堆大小=年轻代大小+老年代大小+持久代大小。持久代一般固定位64M,所以增大年轻代后,将会减少老年代大小,当老年代内存用完会引发Full GC,相当严重。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-XX:SurvivorRatio=8 : 设置年轻代中Eden区与一个Survivor区的比例为8:1,默认为8
-XX:NewRatio=2: 设置老年代和年轻代比例大小2:1,默认为2
-Xss128k: 设置每个线程的栈大小
-XX:PermSize -XX:MaxPermSize: 设置永久代大小,jvm启动时,永久区一开始就占用了PermSize大小的空间,如果空间还不够,可以继续扩展,但是不能超过MaxPermSize,否则会OOM PermSiz space
-XX:MetaspaceSize -XX:MaxMetaspaceSize(JDK1.8): 设置元空间的初始值和最大值
-XX:MaxDirectMemorySize=10M: 设置直接内存大小,如果不指定,则默认与Java堆最大值(-Xmx)一样。NIO操作会占用直接内存,因此大量的NIO操作可能引起直接内存溢出:Direct buffer memory
-XX:PretenureSizeThreshold=3145728: 表示超过3M的数据直接在老年代中保存
-XX:MaxTenuringThreshold=30 : 设置年轻代中的对象存活多少次Minor GC后进入老年代。如果设置为0的话,则年轻代对象不经过Survivor区直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象在年轻代的存活时间,增加在年轻代即被回收的概率。设置为30表示一个对象如果在Survivor空间移动30次还没有被回收就放入年老代。
-XX:+UseParNewGC: 设置年轻代为并行收集。可与CMS收集同时使用。JDK5.0以上,JVM会根据系统配置自行设置
-XX:ParallelGCThreads=8: 配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等
-XX:+PrintGCTimeStamps: 打印GC停顿时间,一般测试用
-XX:+PrintGCDetails: -XX:+PrintGCDetails:打印GC详细日志,一般测试用
如果满足下面的指标,则一般不需要进行GC优化:
- Minor GC 执行时间不到50ms
- Minor GC 执行不频繁,约10秒一次
- Full GC 执行时间不到1s
- Full GC执行频率不算频繁,不低于10分钟1次