G1 Garbage Collector 及JVM 参数说明(持续更新)

20143934_nBdz.png

 

27194103_2kaN.jpg

    注:Remembered Sets(RSets)是每一个region里面帮助G1 GC追踪外部指向这个region的引用。因此现在,取代因为引用指向这个region扫描整个heap区,G1只需要扫描RSets。

 

 

        HopSpot 提供的几种运行模式:

模式选项指定描述说明备注
解释模式-Xint让JVM以解释模式运行Java程序
编译模式-Xcomp让JVM以编译模式运行Java程序
混合模式-Xmixed让JVM以解释+编译模式运行Java程序。默认方式

 

 

================ Java8  JVM 可选项================

可选项默认值解释说明备注
-XX:MetaspaceSize metaspace 初始容量.Metaspace  区域为 Java 1.8 新增,去 1.7 永久代的替代参数。并不是所有的永久代数据都放置在metaspace 区域,只有类消息是放置在metaspace, 其他信息都在堆上 
-XX:MaxMetaspaceSize 

 

metaspace 区的最大容量

 
-XX:G1NewSizePercent8G1 的Young 区是通过算法自动适应确定的。Young区GC的耗时来确定之后的Young大小,如果耗时过长,则调小Young区,耗时过短,则调大Young区.  
-XX:G1RSetUpdatingPauseTimePercent G1 收集器进行GC的时候,更新 RSet 的目标时间值;注:为了让评估暂停阶段把大量的时间花费在拷贝存活对象上。如果改变了花费在更新RSet上的时间,那就必须有确定工作线程可以在回收暂停阶段完成它们的工作;如果不能,那这部分工作就会被放到 Refinement 线程里面去执行,导致并行工作量增加,并行回收次数增多。 
-XX:G1MixedGCCountTarget 当占用内存超过InitiatingHeapOccupancyPercent阀值时, 最多通过多少次Mixed GC来将内存控制在阀值之下. 
-XX:G1HeapRegionSize 表示G1 垃圾收集器将每个Region切分成多大;每个 Region最大不超过 32M(2 的指数), 
-XX:+G1SummarizeRSetStats 统计RSet 的密度数量(细粒度或者粗粒度),这个密度帮助决定是否并行 Refinement线程有能力去应对更新缓存的工作,并且手机更多关于 Nmethods的信息。这个选项每隔 n 次 GC 暂停收集一次 RSet 的统计信息, 这个 N 次 由选项  -XX:G1SummarizeRSetStatsPeriod=n 决定,也是需要通过选项进行设置的。 
-XX:G1SummarizeRSetStatsPeriod=nn  
-XX:G1NewSizePercent 5%初始化年轻代占用整个堆内存的百分比 
-XX:G1MaxNewSizePercent 60%年轻代的上升空间,即最大可以占用堆内存的百分比。 
    
-XX:StringTableSize   
-XX:+PrintStringTableStatistics 打印 StringTable 的统计信息 
-XX:+NoOmitFramePointer   
 -XX:+PreserveFramePointer   
    
    
    
    
    
    

 

 

 

-XX:+PrintStringTableStatistics

在JVM进程退出时,打印出StringTable的统计信息到标准日志输出目录中。

 

-XX:+UseCMSCompactAtFullCollection

默认是开启的;开启内存碎片的合并整理过程

 

-XX:CMSFullGCsBeforeCompaction

设置执行多少次不压缩的FULL GC后,紧接着执行一次碎片整理

 

-XX:+CMSParallelRemarkEnabled

启用并发标记

 

-XX:+CMSScavengeBeforeRemark

如果 remark 时间过长,开启该选项可以强制  remark 之前开启一次 minor gc , 以减少 remark 暂停时间。但是在 remark 之后立即开始一次 minor gc.

 

-XX:MaxGCPauseMills

设置垃圾收集器,最大停顿时间

 

-XX:GCTimeRatio

设置吞吐量的大小。可选值为 1 -- 100 之间,假设 GCTimeRatio 的值为 n,那么系统将花费不超过 1/(1+n) 的时间用于垃圾收集。

 

 

-XX:InitiatingHeapOccupancyPercent

当占用内存超过这个百分比的时候, G1 垃圾收集器开始执行多次Mixed GC来整理老年代内存碎片.

 

 

 

 

 

 

 

-XX:PrintFlagsWithComments

-XX:PrintVMOptions

-XX:PrintFlagsInitial

-XX:ManagementServer

 

 

可选项默认值解释说明
 -XX:+ExplicitGCInvokesConcurrent  None  指定System.gc()采用 CMS 算法,FGC时停机时间会变短,但是CMS GC次数不会变。
-XX:-UseBiasedLocking启用关闭偏向锁
-XX:+PerfDisableSharedMem 启用是否允许写统计文件。由于参数里面带有 Disable,关闭的意思就是允许写统计文件,启用的意思就是禁止写统计文件,注意不要把它理解反了;
   
   
   
   
   
   

 

-Dsun.rmi.dgc.client.gcInterval=36000000
-Dsun.rmi.dgc.server.gcInterval=36000000

rmi默认一小时主动触发一次,这里可以将配置为10小时;

 

 

 

 

 

注意:CMS initial-mark 和 CMS remark 都会导致  stop-the-world。 故在 jstat 查看 FGC 参数值时,会出现 +2 的情况。

 

 

================OS模块初始化相关的VM配置、调试选项================

可选项默认值解释说明
-XX:+UseNUMAfalse使用 NUMA
-XX:+UseLargePagestrue使用大页内存
-XX:+UseSHMfalse使用 SYSV 共享内存
-XX:+MaxFDLimittrue最大文件描述数量
-XX:+PerfAllowAtExitRegistrationfalse     允许向系统注册 atexit 函数
-XX:+PrintMicellaneousfalse输出未分类的调试信息(需要开启Verbose)
   

 

================ OOP 相关 VM 选项 ================

可选项默认值解释说明
-XX:UseCompressedOopsfalse在64位 VM 中使用开启压缩OOPS,用32位指针指向类元数据(仅限64位VM)
-XX:CheckCompressedOopstrue对压缩OOPS开启校验
-XX:CompactFieldstrue字段压实
-XX:PrintCompactFieldsSavingsfalse输出开启CompactFields后,节省了多少字节空间
-XX:FieldsAllocationStyle1域分配策略
   
   

 

 

================ VM 选项:类加载相关 ================

可选项默认值解释说明
-XX:TraceClassLoadingfalse跟踪所有类加载过程
-XX:TraceClassLoadingPreorderfalse跟踪所有类在载入前的过程
-XX:TraceClassInitializationfalse跟踪类初始化过程
-XX:TraceClassResolutionfalse跟着常量池解析过程
-XX:TraceClassUnloadingfalse跟踪类卸载过程
-XX:TraceLoaderConstraintsfalse跟着加载器约束
-XX:PrintSystemDictionaryAtExitfalse输出系统字典信息
-XX:PrintClassStatisticsfalse输出类统计信息
-XX:MustCallLoadClassInternalfalseloadClassInternal() 替代 loadClass()
-XX:LoadLineNumberTablestrue类文件解析器是否加载代码行号表
-XX: LoadLocalVariableTablestrue类文件解析器是否加载局部变量表
-XX:LoadLocalVariableTypeTablestrue类文件解析器是否加载局部变量类型表
-XX:LinkWellKnownClassesfalse解析熟知类
-XX:LazyBootClassLoadertrue是否延迟打开启动类路径
-XX:CompileTheWorldPreloadClassestrue加载一个类时,是否预加载其用到的所有类
-XX:ClassUnloadingtrue类卸载
-XX:AlwaysLockClassLoaderfalse要求VM在调用 loadClass()前先获得类加载器锁
-XX:UnsyncloadClassfalse非同步方式调用 loadClass()
   

 

================ VM 选项:类验证相关 ================

可选项默认值解释说明
-XX:BytecodeVerificationLocalfalse开启对本地类的字节码验证
-XX:BytecodeVerificationRemotetrue开启对远程类的字节码验证
-XX:UseSplitVerifiertrue对 StackMap Table 属性应用 split verifier        
-XX:FailOverToDidVerfier true当对 StackMapTable属性应用 split verifier 校验失败时,回到旧的 verifier。  
   

 

================ VM 选项:GC 日志相关 ================

可选项默认值解释说明
-XX:PrintGCfalse等同于 "-verbose:gc"
-XX:PrintGCDetail GC 时输出更多细节信息
-XXPrintGCDateStampsfalseGC操作的日期信息,相对于时间戳,这个是 GST 时间
-XXPrintGCTimeStampsfalseGC 时的时间戳信息
-XX:PrintGCTaskTimeStampsfalse输出每个 GC 工作线程的时间戳信息
-Xloggc:<filename> 输出GC 日志至文件
-XX:+UseGCLogFileRotation  启用GC日志文件的自动转储
-XX:+PrintTenuringDistribution  
-XX:+PrintGCApplicationStoppedTime  
-XX:CMSWaitDuration2s扫描Old区时间间隔
-XX:CMSInitiatingOccupancyFraction65    Old区占比超过参数执行 GC 操作
-XX:+UseCMSInitiatingOccupancyOnly 配合上面参数使用,只有 old 区,占比条件满足情况下,才触发CMS GC
-XX:PrintFLSStatistics 打印每次gc前后的Heap余量。较大的余量,可以怀疑Heap中存在内存碎片过多
-XX:+ExplicitGCInvokesConcurrent 将System.gc转为background式的回收

 

================ VM 选项:GC 安全点相关 ================

可选项默认值解释说明
-XX:PrintGCApplicationConcurrentTimefalse默认值false, 应用程序运行时间
-XX:PrintGCApplicationStoppedTimefalse应用程序暂停时间,在以安全点开始的操作中,线程停顿时间
-XX:ShowSafepointMsgsfalse显示关于 安全点的信息
-XX:PrintSafepointStatisticsCount300       
-XX:PrintSafepointStatisticsTimeout-1   输出关于安全点的统计信息
-XX:+PrintSafepointStatistics300      应用程序暂停原因

 

================ VM 选项:CMS 配置选项 ================

可选项默认值解释说明
-XX:UseConcMarkSweepGCfalse对老年代使用并发标记-清除(CMS)回收
-XX:CMSIncrementalModefalse增量模式
-XX:CMSIncrementalPacingtrue增量模式自动调整
-XX:ParallelGCThreads0并行执行的GC线程数量
-XX:UseParNewGCfalse对新生代使用并行线程手机,以配合CMS老年代手机。即使不开启该选项,当选择CMS后,新生代默认也会使用ParNew。

 

 

【参考资料】

1.[Oracle 官网文档]. http://www.oracle.com/technetwork/tutorials/tutorials-1876574.html

 

转载于:https://my.oschina.net/Rayn/blog/1510535

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值