• 重要的JVM参数,通用及G1


    1. -XX:+DisableExplicitGC 禁止使用System.gc(),虽说一般的程序猿也不会这么用,还是加上保险
    2. 千万不要设置年轻代大小,G1会动态调节。
    3. -verbose:gc -Xloggc:target/gc.log 一定要设置好gc日志,方便定位
    4. -XX:MaxGCPauseMillis 默认是250ms。如果希望cpu多用于业务计算少用于gc线程,可以调大这个值。
    5. 如果G1发生full gc较多,需要分析原因。如果日志中这一行 "Humongous regions: X->Y” 中的Y就是大对象占用的region数量。可以使用 -XX:G1HeapRegionSize 调大region的大小来减少大对象占用的region数。
    6. 增加并发标记的线程数,通过 -XX:ConcGCThreads这个参数。可以让垃圾回收更快一点,以减少有些垃圾来不及回收。但是会影响cpu的使用
    7. -XX:G1ReservePercent G1会保留一部分堆内存用来防止分配不了的情况,默认是10
    8.  -XX:InitiatingHeapOccupancyPercent  全部使用的region占到总堆空间多少开始gc,默认值45%。调小可以早点开始gc周期
    9. -XX:G1MixedGCLiveThresholdPercent=65

      为混合垃圾回收周期中要包括的旧区域设置占用率阈值。默认占用率为 65%。这是一个实验性的标志。有关示例,请参见“如何解锁实验性虚拟机标志”。此设置取代了 -XX:G1OldCSetRegionLiveThresholdPercent 设置。Java HotSpot VM build 23 中没有此设置。

    10. -XX:G1MixedGCCountTarget=8 调大该值可以减少每次停顿的时间

      设置标记周期完成后,对存活数据上限为 G1MixedGCLIveThresholdPercent 的旧区域执行混合垃圾回收的目标次数。默认值是 8 次混合垃圾回收。混合回收的目标是要控制在此目标次数以内。Java HotSpot VM build 23 中没有此设置。

    11. -XX:+G1EagerReclaimHumongousObjects  在YGC的时候,G1也能回收那些没有任何引用指向的超大对象

    参考的文章

    https://www.oracle.com/cn/technical-resources/articles/java/g1gc.html

    转载自 https://blog.csdn.net/renfufei/article/details/41897113

    什么是转移失败(Evacuation Failure)?

    对 survivors 或 promoted objects 进行GC时如果JVM的heap区不足就会发生提升失败(promotion failure). 堆内存不能继续扩充,因为已经达到最大值了. 当使用 -XX:+PrintGCDetails 时将会在GC日志中显示 to-space overflow (to-空间溢出)。

    这是很昂贵的操作!

    • GC仍继续所以空间必须被释放.
    • 拷贝失败的对象必须被放到正确的位置(tenured in place).
    • CSet指向区域中的任何 RSets 更新都必须重新生成(regenerated).
    • 所有这些步骤都是代价高昂的.

    如何避免转移失败(Evacuation Failure)

    要避免避免转移失败, 考虑采纳下列选项.

    • 增加堆内存大小
      • 增加 -XX:G1ReservePercent=n, 其默认值是 10.
      • G1创建了一个假天花板(false ceiling),在需要更大 'to-space' 的情况下会尝试从保留内存获取(leave the reserve memory free).
    • 更早启动标记周期(marking cycle)
    • 通过采用 -XX:ConcGCThreads=n 选项增加标记线程(marking threads)的数量.
    选项/默认值说明
    -XX:+UseG1GC 使用 G1 (Garbage First) 垃圾收集器
    -XX:MaxGCPauseMillis=n 设置最大GC停顿时间(GC pause time)指标(target). 这是一个软性指标(soft goal), JVM 会尽量去达成这个目标.
    -XX:InitiatingHeapOccupancyPercent=n 启动并发GC周期时的堆内存占用百分比. G1之类的垃圾收集器用它来触发并发GC周期,基于整个堆的使用率,而不只是某一代内存的使用比. 值为 0 则表示"一直执行GC循环". 默认值为 45.
    -XX:NewRatio=n 新生代与老生代(new/old generation)的大小比例(Ratio). 默认值为 2.
    -XX:SurvivorRatio=n eden/survivor 空间大小的比例(Ratio). 默认值为 8.
    -XX:MaxTenuringThreshold=n 提升年老代的最大临界值(tenuring threshold). 默认值为 15.
    -XX:ParallelGCThreads=n 设置垃圾收集器在并行阶段使用的线程数,默认值随JVM运行的平台不同而不同.
    -XX:ConcGCThreads=n 并发垃圾收集器使用的线程数量. 默认值随JVM运行的平台不同而不同.
    -XX:G1ReservePercent=n 设置堆内存保留为假天花板的总量,以降低提升失败的可能性. 默认值是 10.
    -XX:G1HeapRegionSize=n 使用G1时Java堆会被分为大小统一的的区(region)。此参数可以指定每个heap区的大小. 默认值将根据 heap size 算出最优解. 最小值为 1Mb, 最大值为 32Mb.
  • 相关阅读:
    c# 三层结构的简单理解
    浅析C#鼠标右键如何添加
    三层结构开发的理解
    Windows快捷键大全
    command 中 ExecuteScalar() ExecuteNonQuery ()和ExecuteReader()的用法
    很拽的JSON
    FCKeditor的全局API
    WebForm_DoPostBackWithOptions 丢失的解决
    闭包的错误例子
    XPath学习笔记 XPath数据模型
  • 原文地址:https://www.cnblogs.com/juniorMa/p/13527712.html
Copyright © 2020-2023  润新知