G1
2021-09-01 09:16:34 0 举报
JVM G1
作者其他创作
大纲/内容
属性-多种技术实现高性能和短暂停
全局标记
将堆划分为若干个相同大小的区域
The region sizes can vary from 1 MB to 32 MB depending on the heap size. The goal is to have no more than 2048 regions
对全堆进行进行存活对象标记
知道哪些区域垃圾多(即活对象少)进行优先回收
将一个或多个区域复制压缩到单个区域,释放内存(CMS不进行压缩)
不是实时(real-time)垃圾收集器,通过之前的收集情况预估达到用户暂停时间目标
浮动垃圾-通过STAB(snapshot-at-the-beginning )方式找到活跃对象
标记周期阶段
初始标记阶段(Initial marking phase)
根区域扫描阶段(Root region scanning phase)
并发标记阶段(Concurrent marking phase)
Remark阶段(Remark phase)
清理阶段(Cleanup phase)
失败场景-在FGC 后还是找不到空闲空间进行分配
什么时候暂停?
初始标记(initial marking work)
重新标记(Remark phase)
清理暂停(cleanup phase )-进行识别空区域,并确定下一次收集的旧区域
适用条件
his means heap sizes of around 6 GB or larger, and a stable and predictable pause time below 0.5 seconds
More than 50% of the Java heap is occupied with live data
The rate of object allocation rate or promotion varies significantly
The application is experiencing undesired long garbage collection or compaction pauses (longer than 0.5 to 1 second)
重要默认值
XX:G1HeapRegionSize=n 设置 G1 区域的大小。该值将是 2 的幂,范围从 1 MB 到 32 MB。目标是基于最小 Java 堆大小拥有大约 2048 个区域
-XX:MaxGCPauseMillis=200 为所需的最大暂停时间设置目标值。默认值为 200 毫秒
-XX:G1NewSizePercent=5 将堆的百分比设置为年轻代大小的最小值。默认值为 Java 堆的 5%
-XX:G1MaxNewSizePercent=60 设置堆大小的百分比以用作年轻代大小的最大值。默认值为 Java 堆的 60%
-XX:ParallelGCThreads=n 设置 STW 工作线程的值。将 的值设置n为逻辑处理器的数量。的值与n逻辑处理器的数量相同,最多为 8
-XX:ConcGCThreads=n 设置并行标记线程的数量。设置n为并行垃圾回收线程 (ParallelGCThreads) 数量的大约 1/4。
-XX:InitiatingHeapOccupancyPercent=45 设置触发标记周期的 Java 堆占用阈值。默认占用率为整个 Java 堆的 45%。
-XX:G1MixedGCLiveThresholdPercent=85 设置要包含在混合垃圾回收周期中的旧区域的占用阈值。默认占用率为 85%。脚参考 1
-XX:G1HeapWastePercent=5 设置您愿意浪费的堆的百分比。当可回收百分比小于堆浪费百分比时,Java HotSpot VM 不会启动混合垃圾收集周期。默认值为 5%。
-XX:G1MixedGCCountTarget=8 在标记周期后设置混合垃圾收集的目标数量,以收集最多具有G1MixedGCLIveThresholdPercent实时数据的旧区域。默认为 8 个混合垃圾回收
-XX:G1OldCSetRegionThresholdPercent=10 设置混合垃圾收集周期中要收集的旧区域数量的上限。默认值为 Java 堆的 10%
-XX:G1ReservePercent=10 设置保留内存的百分比以保持空闲状态,以降低空间溢出的风险。默认值为 10%
调优建议
年轻代大小:避免使用-Xmn选项或任何或其他相关选项(例如-XX:NewRatio. 修复年轻代的大小会覆盖目标暂停时间目标
-XX:InitiatingHeapOccupancyPercent:用于更改标记阈值。
-XX:G1MixedGCLiveThresholdPercentand -XX:G1HeapWastePercent:用于更改混合垃圾收集决策。
-XX:G1MixedGCCountTarget和-XX:G1OldCSetRegionThresholdPercent:用于调整旧区域的 CSet。
-XX:G1MixedGCLiveThresholdPercentand -XX:G1HeapWastePercent:用于更改混合垃圾收集决策。
-XX:G1MixedGCCountTarget和-XX:G1OldCSetRegionThresholdPercent:用于调整旧区域的 CSet。
出现 to-space exhausted,to-space overflow,增加该-XX:G1ReservePercent选项的值(以及相应的总堆)以增加“to-space”的保留内存量,通过减少值来提前开始标记周期 -XX:InitiatingHeapOccupancyPercent,增加该-XX:ConcGCThreads选项的值以增加并行标记线程的数量
如果有大量大对象,并且如果此类分配使您的旧代碎片化,则增加的值-XX:G1HeapRegionSize使之前的大量对象不再庞大并遵循常规分配路径
0 条评论
下一页