JVM原理及调优(6)——G1收集器及G1日志分析

本文详细介绍了JVM的G1垃圾收集器,包括其概述、内存结构、Young GC和Old GC的工作流程。强调了在配置G1时不应设定年轻代大小以保持G1的智能调整能力,并提供了关于响应时间指标、转移失败及其避免方法的最佳实践。此外,还讨论了G1的日志分析和调优策略。
摘要由CSDN通过智能技术生成

系列文章规划:

  1. JVM原理及调优(1)——内存模型
  2. JVM原理及调优(2)——内存管理
  3. JVM原理及调优(3)——编译机制
  4. JVM原理及调优(4)——类加载机制
  5. JVM原理及调优(5)——垃圾回收和调优
  6. JVM原理及调优(6)——G1收集器及G1日志分析
  7. JVM原理及调优(7)——JDK常用内置工具

1 G1简介

1.1 概述

G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多核处理器及大容量内存的机器。
在极大概率满足GC停顿时间要求的同时,还具备高吞吐量的特性.。Oracle JDK 7 update 4 及以上版本已完全支持。其设计目标如下:

  • 可以像CMS收集器一样,GC操作与应用的线程一起并发执行;
  • 紧凑的空闲内存区间且没有很长的GC停顿时间;
  • 需要更多可预测的GC停顿时间;
  • 不想牺牲太多吞吐量性能;
  • 启动后不需要请求更大的Java堆。

G1的长期目标是取代CMS(Concurrent Mark-Sweep Collector, 并发标记-清除)。因为特性的不同,G1成为比CMS更好的解决方案。其中一个区别是,G1是一款压缩型的收集器。G1通过有效的压缩完全避免了对细微空闲内存空间的分配,不用依赖于regions,这不仅大大简化了收集器,而且还消除了潜在的内存碎片问题。除压缩以外,G1的垃圾收集停顿也比CMS容易估计,也允许用户自定义所希望的停顿参数(pause targets)。

内存占用

如果从 ParallelOldGC 或者 CMS收集器迁移到 G1,可能会看到JVM进程占用更多的内存(a larger JVM process size)。 这在很大程度上与 “accounting” 数据结构有关,如 Remembered Sets 和 Collection Sets。

  • Remembered Sets 简称 RSets。跟踪指向某个heap区内的对象引用。 堆内存中的每个区都有一个 RSet。 RSet 使heap区能并行独立地进行垃圾集合。 RSets的总体影响小于5%。

  • Collection Sets 简称 CSets。收集集合, 在一次GC中将执行垃圾回收的heap区。GC时在CSet中的所有存活数据(live data)都会被转移(复制/移动)。集合中的heap区可以是 Eden, survivor, 和/或 old generation。CSets所占用的JVM内存小于1%。

推荐使用G1的场景

G1的首要目标是为需要大量内存的系统提供一个保证GC低延迟的解决方案。 也就是说堆内存在6GB及以上,稳定和可预测的暂停时间小于0.5秒。

如果应用程序具有如下的一个或多个特征,那么将垃圾收集器从CMS或ParallelOldGC切换到G1将会大大提升性能。

  • Full GC 次数太频繁或者消耗时间太长.
  • 对象分配的频率或代数提升(promotion)显著变化.
  • 受够了太长的垃圾回收或内存整理时间(超过0.5~1秒)

注意: 如果正在使用CMS或ParallelOldGC,而应用程序的垃圾收集停顿时间并不长,那么建议继续使用现在的垃圾收集器。使用最新的JDK时,并不要求切

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值