图解JVM垃圾回收

简介: 图解JVM垃圾回收

一、垃圾收集器所属分代总览


1、各代采用的收集器


有连线的表示可搭配使用


image.png

HotSpot虚拟机各代对应的垃圾收集器


2、垃圾回收算法


2.1、标记-清除过程


第一阶段:标记出可回收对象

第二阶段:回收被标记的对象

缺点:产生大量的内存碎片


image.png

2.2、复制回收过程


内存被分为相等的两块(S0+S1),S0为使用内存,S1为保留内存,回收时将S0的存活对象一次性全部复制到S1,再一次性清空S0内存

缺点:内存使用率只有50%


image.png


2.3、标记整理过程


第一阶段:标记出存活对象

第二阶段:存活对象往一端移动,清理边界外内存


image.png


3、各收集器采用的收集算法


业界商用的JVM收集算法都是采用分代收集,按不同代的特点采用不同的收集算法。

通常情况,年轻代采用复制算法,年老代采用标记-整理或标记-清除算法。


image.png

G1整体上看基于 "标记-整理" 算法,而两个Region之间则基于 "复制" 算法


二、各垃圾收集器详解


1、Serial 和Serial Old组合收集


单线程串行收集器,垃圾收集时会“Stop The World”


image.png

Serial 和Serial Old组合收集示意图


2、ParNew 和Serial Old组合收集


ParNew收集器就是Serial收集器的多线程版本,收集算法和回收策略和Serial完全一样,也会Stop The World。


注意:ParNew是并行收集器,不是并发收集器


image.png

ParNew 和Serial Old组合收集示意图


3、Parallel Scavenge收集器


跟ParNew类似,是一种吞吐量优先收集器,即目标是达到一个可控制的吞吐量

吞吐量 = 运行用户代码时间 / (运行用户代码时间) + 垃圾收集时间


4、Parallel Scavenge和Parallel Old组合收集


Parallel Old是Parallel Scavenge收集器的老年代版本


image.png

Parallel Scavenge和Parallel Old组合收集示意图


5、CMS收集器


CMS收集器是一种并发收集器,目标时已达到最小回收停顿时间,采用标记清除算法。


image.png

CMS收集器示意图


6、G1收集器


G1内存布局中,保留了年轻代年老代的概念,但不是物理隔离,而是很多个大小相同的

独立区域(Region),年轻代和年老代都是一部分Region(不需要连续)的集合


初始标记:标记GC Roots能直接关联到的对象


并发标记:从GC Roots中对堆对象进行可达性分析,找出存活对象


最终标记:修改并发期间变动的标记记录


筛选回收:根据用户指定的停顿时间制定回收计划


image.png

G1收集器示意图


image.png

G1内存布局示意图


三、存活对象的判断


不管是采用什么样的垃圾回收算法,都需要判断对象的存活状态,通常会采用两种方式判断


1、引用计数法


对象中增加一个引用计数器,每当有地方引用该对象时,其计数器+1,引用失效后计数器-1,当计数器为0的对象,即认为是可回收的对象,但是这种方式无法解决循环引用的问题,所以目前主流的垃圾回收器都没有采用这种方式。


2、可达性分析算法


通过GC Roots集合中的对象开始搜索,当某对象不能通过GCRoots到达时,判定为对象可回收。


对象1、2、3、4不可回收,对象5、6、7可回收


image.png

GCRoots.png


附一张之前画过的JVM内存模型


image.png

内存模型.jpeg


相关文章
|
4月前
|
存储 算法 Oracle
极致八股文之JVM垃圾回收器G1&ZGC详解
本文作者分享了一些垃圾回收器的执行过程,希望给大家参考。
|
19天前
|
监控 算法 Java
Java虚拟机(JVM)的垃圾回收机制深度解析####
本文深入探讨了Java虚拟机(JVM)的垃圾回收机制,旨在揭示其背后的工作原理与优化策略。我们将从垃圾回收的基本概念入手,逐步剖析标记-清除、复制算法、标记-整理等主流垃圾回收算法的原理与实现细节。通过对比不同算法的优缺点及适用场景,为开发者提供优化Java应用性能与内存管理的实践指南。 ####
|
11天前
|
监控 算法 Java
Java虚拟机(JVM)垃圾回收机制深度剖析与优化策略####
本文作为一篇技术性文章,深入探讨了Java虚拟机(JVM)中垃圾回收的工作原理,详细分析了标记-清除、复制算法、标记-压缩及分代收集等主流垃圾回收算法的特点和适用场景。通过实际案例,展示了不同GC(Garbage Collector)算法在应用中的表现差异,并针对大型应用提出了一系列优化策略,包括选择合适的GC算法、调整堆内存大小、并行与并发GC调优等,旨在帮助开发者更好地理解和优化Java应用的性能。 ####
16 0
|
10天前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####
|
14天前
|
机器学习/深度学习 监控 算法
Java虚拟机(JVM)的垃圾回收机制深度剖析####
本文深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法、性能调优策略及未来趋势。通过实例解析,为开发者提供优化Java应用性能的思路与方法。 ####
29 1
|
17天前
|
监控 算法 Java
Java虚拟机垃圾回收机制深度剖析与优化策略####
【10月更文挑战第21天】 本文旨在深入探讨Java虚拟机(JVM)中的垃圾回收机制,揭示其工作原理、常见算法及参数调优技巧。通过案例分析,展示如何根据应用特性调整GC策略,以提升Java应用的性能和稳定性,为开发者提供实战中的优化指南。 ####
33 5
|
19天前
|
存储 算法 安全
JVM常见面试题(四):垃圾回收
堆区域划分,对象什么时候可以被垃圾器回收,如何定位垃圾——引用计数法、可达性分析算法,JVM垃圾回收算法——标记清除算法、标记整理算法、复制算法、分代回收算法;JVM垃圾回收器——串行、并行、CMS垃圾回收器、G1垃圾回收器;强引用、软引用、弱引用、虚引用
|
17天前
|
存储 算法 Java
JVM进阶调优系列(10)敢向stop the world喊卡的G1垃圾回收器 | 有必要讲透
本文详细介绍了G1垃圾回收器的背景、核心原理及其回收过程。G1,即Garbage First,旨在通过将堆内存划分为多个Region来实现低延时的垃圾回收,每个Region可以根据其垃圾回收的价值被优先回收。文章还探讨了G1的Young GC、Mixed GC以及Full GC的具体流程,并列出了G1回收器的核心参数配置,帮助读者更好地理解和优化G1的使用。
|
18天前
|
监控 Java 测试技术
Elasticsearch集群JVM调优垃圾回收器的选择
Elasticsearch集群JVM调优垃圾回收器的选择
38 1
|
2月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
73 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS