JAVA虚拟机(二)-图解垃圾收集器

版权声明:欢迎转载,标明出处 https://blog.csdn.net/mz4138/article/details/81948187


Java 的垃圾回收由JVM管理,开发者们不用自己去释放创建的区域

了解垃圾回收的算法和具体的垃圾收集器是高级程序员必修的功课。

本文只是图解垃圾收集的各种算法。 描述具体的垃圾收集器用的那个算法

算法

复制算法

通常情况下, 对象在Eden区分配。
新生代复制算法
当对象慢慢的占满了Eden区的时候, 产生Minor GC, 将 Eden + from 区的有效对象复制到to
新生代复制算法
Eden + from 区的有效对象复制到to区. 新对象在 Eden 分配。
新生代复制算法
from 和to 切换
新生代复制算法
分配空间 与 引用无效
新生代复制算法
Eden + from 区的有效对象复制到to区. 新对象在 Eden 分配。
新生代复制算法
from to 交换。
新生代复制算法

标记清理算法

标记整理算法,标记+清理。 会产生空间碎片。

老年代 CMS+Serial Old 组合。 CMS收集器为老年代分配对象失败时,采用Serial Old 的标记整理算法,整理老年代内存

标记
老年代标记清理1
清理
老年代标记清理2

标记整理算法

标记整理算法,就是将有效对象向一端移动。腾出连续的可用空间

标记
老年代整理算法1
整理
老年代整理算法1

垃圾收集器

基本概念:

并发 用户线程和垃圾收集线程同时执行

并行 垃圾收集线程多线程执行

新生代垃圾收集器

新生代 由于对象朝生夕死的特性,采用的垃圾回收算法都是复制算法

Serial

复制算法
单线程的垃圾收集器,在JAVA 1.3 以前是新生代唯一的选择。

在进行垃圾回收时,会停顿用户所有的JAVA线程。

ParNew

复制算法
多线程的垃圾收集器

在进行垃圾回收时,会停顿用户所有的JAVA线程。

Parallel Scavenge

复制算法
多线程的垃圾收集器

在进行垃圾回收时,会停顿用户所有的JAVA线程。

老年代垃圾收集器

Serial Old

标记整理算法
单线程的垃圾收集器。 有多种搭配

与新生代的 Serial 配套使用的老年代垃圾收集器。

在进行垃圾回收时,会停顿用户所有的JAVA线程

Parallel Old

标记整理算法
并发并行收集器。 与 Parallel Scavenge 组合

在枚举根节点和重新标记阶段仍然会Stop the World

并发并行收集器。

CMS

标记清理算法
并发并行收集器。 与ParNew 或者 Serial 组合

在枚举根节点和重新标记阶段仍然会Stop the World

搭配

做电商的要求响应时间最短
ParNew+CMS

使用-XX:+UseConcMarkSweepGC 开启ParNew+CMS

-XX:+UseParNewGC 强制新生代是ParNew

猜你喜欢

转载自blog.csdn.net/mz4138/article/details/81948187