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

 

    注:Remembered Sets(RSets)是每个region里面帮助G1 GC追踪外部指向这个region的引用。所以如今,取代由于引用指向这个region扫描整个heap区,G1只须要扫描RSets。html

 

 

        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:G1NewSizePercent 8 G1 的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=n n    
-XX:G1NewSizePercent  5% 初始化年轻代占用整个堆内存的百分比  
-XX:G1MaxNewSizePercent  60% 年轻代的上升空间,即最大能够占用堆内存的百分比。  
       
-XX:StringTableSize      
-XX:+PrintStringTableStatistics   打印 StringTable 的统计信息  
-XX:+NoOmitFramePointer      
 -XX:+PreserveFramePointer      
       
       
       
       
       
       

 

 

 

-XX:+PrintStringTableStatistics并发

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

 

-XX:+UseCMSCompactAtFullCollection函数

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

 

-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:+UseNUMA false 使用 NUMA
-XX:+UseLargePages true 使用大页内存
-XX:+UseSHM false 使用 SYSV 共享内存
-XX:+MaxFDLimit true 最大文件描述数量
-XX:+PerfAllowAtExitRegistration false      容许向系统注册 atexit 函数
-XX:+PrintMicellaneous false 输出未分类的调试信息(须要开启Verbose)
     

 

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

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

 

 

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

可选项 默认值 解释说明
-XX:TraceClassLoading false 跟踪全部类加载过程
-XX:TraceClassLoadingPreorder false 跟踪全部类在载入前的过程
-XX:TraceClassInitialization false 跟踪类初始化过程
-XX:TraceClassResolution false 跟着常量池解析过程
-XX:TraceClassUnloading false 跟踪类卸载过程
-XX:TraceLoaderConstraints false 跟着加载器约束
-XX:PrintSystemDictionaryAtExit false 输出系统字典信息
-XX:PrintClassStatistics false 输出类统计信息
-XX:MustCallLoadClassInternal false loadClassInternal() 替代 loadClass()
-XX:LoadLineNumberTables true 类文件解析器是否加载代码行号表
-XX: LoadLocalVariableTables true 类文件解析器是否加载局部变量表
-XX:LoadLocalVariableTypeTables true 类文件解析器是否加载局部变量类型表
-XX:LinkWellKnownClasses false 解析熟知类
-XX:LazyBootClassLoader true 是否延迟打开启动类路径
-XX:CompileTheWorldPreloadClasses true 加载一个类时,是否预加载其用到的全部类
-XX:ClassUnloading true 类卸载
-XX:AlwaysLockClassLoader false 要求VM在调用 loadClass()前先得到类加载器锁
-XX:UnsyncloadClass false 非同步方式调用 loadClass()
     

 

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

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

 

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

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

 

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

可选项 默认值 解释说明
-XX:PrintGCApplicationConcurrentTime false 默认值false, 应用程序运行时间
-XX:PrintGCApplicationStoppedTime false 应用程序暂停时间,在以安全点开始的操做中,线程停顿时间
-XX:ShowSafepointMsgs false 显示关于 安全点的信息
-XX:PrintSafepointStatisticsCount 300        
-XX:PrintSafepointStatisticsTimeout -1    输出关于安全点的统计信息
-XX:+PrintSafepointStatistics 300       应用程序暂停缘由

 

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

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

 

 

【参考资料】

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

相关文章
相关标签/搜索