JVM启动参数配置详解

JVM启动参数配置详解

  • 1. JDK8的JVM启动参数默认配置
  • 2. JDK8的JVM启动参数说明
    • 2.1 基本参数
    • 2.2 G1相关参数
    • 2.3 辅助信息

1. JDK8的JVM启动参数默认配置

-Xms2g -Xmx2g  (按不同容器,4G及以下建议为50%,6G以上,建议设置为70%)
-XX:MetaspaceSize=128m 
-XX:MaxMetaspaceSize=512m
-Xss256k
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:AutoBoxCacheMax=20000 
-XX:+HeapDumpOnOutOfMemoryError   (当JVM发生OOM时,自动生成DUMP文件)
-XX:HeapDumpPath=/data/logs/gc/
-XX:ErrorFile=/data/logs/gc/hs_err_%p.log   (当JVM发生崩溃时,自动生成错误日志)
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:/data/logs/gc/gc-ePrint-service.log

2. JDK8的JVM启动参数说明

2.1 基本参数

JVM启动参数配置详解_第1张图片

2.2 G1相关参数

JVM启动参数配置详解_第2张图片

附:G1GC的详细过程
G1提供了两种GC模式,Young GC和Mixed GC,两种都是Stop The World(STW)的。

1. Young GC

Young GC主要是对Eden区进行GC,它在Eden空间耗尽时会被触发。在这种情况下,Eden空间的数据移动到Survivor空间中,如果Survivor空间不够,Eden空间的部分数据会直接晋升到年老代空间。Survivor区的数据移动到新的Survivor区中,也有部分数据晋升到老年代空间中。最终Eden空间的数据为空,GC停止工作,应用线程继续执行。

2. Mixed GC

Mix GC不仅进行正常的新生代垃圾收集,同时也回收部分后台扫描线程标记的老年代分区。
它的GC步骤分2步: 全局并发标记(global concurrent marking) 拷贝存活对象(evacuation)
在进行Mix GC之前,会先进行global concurrent marking(全局并发标记)。 在G1 GC中,它主要是为Mixed GC提供标记服务的,并不是一次GC过程的一个必须环节。

global concurrent marking的执行过程分为五个步骤:
    初始标记(initial mark,STW)在此阶段,G1 GC 对根对象进行标记。该阶段与常规的 (STW) 年轻代垃圾回收密切相关。
    根区域扫描(root region scan)G1 GC 在初始标记的存活区扫描对老年代的引用,并标记被引用的对象。该阶段与应用程序(非 STW)同时运行,并且只有完成该阶段后,才能开始下一次 STW 年轻代垃圾回收。
    并发标记(Concurrent Marking)G1 GC 在整个堆中查找可访问的(存活的)对象。该阶段与应用程序同时运行,可以被 STW 年轻代垃圾回收中断
    最终标记(Remark,STW)该阶段是 STW 回收,帮助完成标记周期。G1 GC 清空 SATB 缓冲区,跟踪未被访问的存活对象,并执行引用处理。
    清除垃圾(Cleanup,STW)在这个最后阶段,G1 GC 执行统计和 RSet 净化的 STW 操作。在统计期间,G1 GC 会识别完全空闲的区域和可供进行混合垃圾回收的区域。清理阶段在将空白区域重置并返回到空闲列表时为部分并发。

Young GC:选定所有新生代里的region。通过控制新生代的region个数来控制young GC的开销。
Mixed GC:选定所有新生代里的region,外加根据global concurrent marking统计得出收集收益高的若干老年代region。在用户指定的开销目标范围内尽可能选择收益高的老年代region。

在G1中,有一种特殊的区域,叫Humongous区域。 如果一个对象占用的空间超过了分区容量50%以上,G1收集器就认为这是一个巨型对象。这些巨型对象,默认直接会被分配在年老代。

2.3 辅助信息

JVM启动参数配置详解_第3张图片

你可能感兴趣的:(java,jvm,java,开发语言,运维)