JVM之G1垃圾回收器
G1垃圾收集器采用的是区域化、分布式的垃圾回收器。堆被划分成 许多个连续的区域(region)。每个区域大小相等,在1M~32M之间。JVM最多支持2000个区域,可推算G1能支持的最大内存为2000*32M=62.5G。区域(region)的大小在JVM初始化的时候决定,也可以用-XX:G1HeapReginSize设置。
虽然在G1收集器里面将整个内存区域都混合在了一起,但是其本身依然也是在小范围内要进行年轻代与老年代的区分,也就是说依然会采用不同的GC方式来处理不同的区域。
内存占用
如果从 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的首要目标是为需要大量内存的系统提供一个保证GC低延迟的解决方案. 也就是说堆内存在6GB及以上,稳定和可预测的暂停时间小于0.5秒。
如果应用程序具有如下的一个或多个特征,那么将垃圾收集器从CMS或ParallelOldGC切换到G1将会大大提升性能。
- Full GC 次数太频繁或者消耗时间太长
- 对象分配的频率或代数提升(promotion)显著变化
- 受够了太长的垃圾回收或内存整理时间(超过0.5~1秒)
注意: 如果正在使用CMS或ParallelOldGC,而应用程序的垃圾收集停顿时间并不长,那么继续使用现在的垃圾收集器是个好主意. 使用最新的JDK时并不要求切换到G1收集器。
年轻代垃圾回收
- 堆一整块内存空间,被分为多个heap区(regions)
- 年轻代内存由一组不连续的heap区组成. 这使得在需要时很容易进行容量调整
- 年轻代的垃圾收集,或者叫 young GCs, 会有 stop the world 事件. 在操作时所有的应用程序线程都会被暂停(stopped)
- 年轻代 GC 通过多线程并行进行
- 存活的对象被拷贝到新的 survivor 区或者老年代
垃圾回收前
垃圾回收后
老年代垃圾回收
和 CMS 收集器相似, G1 收集器也被设计为用来对老年代的对象进行低延迟(low pause)的垃圾收集. 下表描述了G1收集器在老年代进行垃圾回收的各个阶段
老年代垃圾回收的几个关键点
1. 并发标记清理阶段(Concurrent Marking Phase)
相关推荐
JVM面试资料。 JVM结构:类加载器,执行引擎,本地方法接口,本地内存结构;...七大垃圾回收器:Serial、Serial Old、ParNew、CMS、Parallel、Parallel Old、G1 JVM调优:命令行指令,设置堆内存大小的参数
2. ** Region划分**:通过Region划分,使得GC可以更灵活地进行局部或全局的垃圾回收。 3. **暂停预测**:G1能够预测每次GC的停顿时间,从而让开发者可以设定一个期望的停顿目标。 4. **空间整合**:G1在回收垃圾时...
Java虚拟机(JVM)的垃圾回收(GC)机制是Java程序高效运行的关键部分,它自动管理内存,释放不再使用的对象以避免内存泄漏。本文主要探讨JVM堆内存的结构和GC的工作原理,以及如何进行性能调优。 JVM堆是Java应用...
第五节:垃圾回收器 1.1Serial/Serial Old收集器 1.2 ParNew收集器 1.3Parallel Scavenge收集器 1.4Parallel Old收集器 1.5CMS(Current Mark Sweep)收集器 1.6G1收集器 第六节:JVM参数调优 1.1 JVM重要参数介绍...
Java虚拟机(JVM)内存模型和垃圾回收机制是Java开发中至关重要的概念。本文将深入探讨这两个主题,帮助理解JVM如何管理...开发者应根据实际需求选择合适的垃圾回收器,并关注内存分配策略,以实现高效稳定的程序运行。
Java虚拟机(JVM)是Java程序运行的基础,它的核心组成部分之一就是垃圾回收(Garbage Collection,简称GC)。GC是JVM自动管理内存的主要方式,它负责识别并清理不再使用的对象,以避免内存泄漏和资源浪费。理解并...
7. G1垃圾回收器 G1是Oracle JDK 1.6引入的一种新的垃圾回收器,它结合了分代、并发和空间整理的特性,目标是实现可预测的暂停时间模型。G1将堆划分为多个大小固定的区域,并尝试预测每个GC周期的暂停时间,从而满足...
### G1垃圾回收器知识点详解 #### 一、引言 随着Java编程语言在大型服务器应用中的广泛应用,垃圾回收机制成为保障系统稳定性和性能的关键因素之一。这些应用通常具有大量活跃堆内存数据以及显著的线程级并行性,...
**JVM之垃圾回收器** Java虚拟机(JVM)是Java编程语言的核心组成部分,它负责执行字节码并管理程序运行时的内存。在JVM的内存模型中,垃圾回收(Garbage Collection, GC)是一项重要的功能,它自动识别并清理不再...
JVM结构+垃圾回收器+锁总结
6. **Java 7与G1 GC**:2011年,Java 7引入了G1(Garbage First)垃圾回收器,它是一种并行、并发且具有低延迟特性的垃圾回收器,适用于大型应用。 7. **Java 8与元空间**:2014年,Java 8中,永久代被元空间...
JVM的默认配置会随着JDK版本的更新而变化,例如,从JDK 9开始,G1成为默认的垃圾回收器。 了解GC的性能指标,如吞吐量(运行用户代码的时间占比)、暂停时间、收集频率和内存占用,可以帮助开发者根据应用需求调整...
Java虚拟机(JVM)是Java程序运行的基础,它的核心组成部分之一就是垃圾回收器(Garbage Collector, GC),以及内存分配策略。理解这些概念对于优化Java应用性能至关重要。本篇文章将深入探讨JVM的垃圾回收机制以及...
**JVM(Java Virtual Machine)与G1垃圾收集器** JVM,全称为Java虚拟机,是Java程序的运行环境,它将Java源代码编译成字节码,然后解释执行这些字节码,实现了“一次编写,到处运行”的目标。JVM的主要任务包括...
4. 分区算法:G1和ZGC等垃圾回收器采用,将堆划分为多个大小固定的区域,便于并发回收和减少碎片。 四、垃圾回收参数调整 JVM提供了丰富的参数来调整垃圾回收行为,如`-Xms`和`-Xmx`设置堆内存大小,`-XX:NewRatio...
当一个对象不再有任何引用指向它时,这个对象就会被认为是“垃圾”,垃圾回收器会适时地将其占用的内存空间释放出来,供后续分配新对象使用。 JVM中的垃圾回收主要分为以下几个阶段: 1. **标记阶段**:此阶段垃圾...
- **G1(Garbage-First)GC**:新一代的垃圾回收器,目标是预测并控制垃圾回收的停顿时间。 理解JVM内存管理和垃圾回收机制对于优化Java应用程序性能至关重要,开发者可以通过调整JVM参数来定制适合应用需求的内存...
《深入理解JVM & G1 GC》这篇文章和相关压缩包文件主要聚焦于Java虚拟机(JVM)的内存管理,特别是垃圾收集器(GC)的优化,特别是G1(Garbage-First)垃圾收集器的深度解析。下面将详细阐述JVM、GC的基本概念,...
JVM的垃圾回收器有多种,如串行GC(Serial GC)、并行GC(Parallel GC)、并发标记扫描GC(CMS, Concurrent Mark Sweep)和G1垃圾收集器等。选择合适的垃圾回收器取决于应用的需求,例如,对于响应时间敏感的应用,...