写点什么

JVM 垃圾回收原理简述

发布于: 2020 年 08 月 04 日
JVM垃圾回收原理简述

GC 时机

  1. new 对象失败

  2. 调用 system.gc()

先触发 young gc,当将存活 8 次的对象分配到 old 失败时,触发 full gc。gc 的过程是先用可达性分析标记活跃对象,随后回收垃圾对象,也就是未被标记的对象,其中进行活跃对象标记的时候,会触发 STOP THE WORLD,这段时间整个系统将无法对外提供服务,所以对于系统来所整个时间越少越好。

GC 过程

可达性分析

用来标记活跃对象的方法,从 GC ROOT 开始,可以被访问到的对象既是活跃对象。GC ROOT 一般是虚拟机栈中的局部变量,又或是静态变量,这部分的特点是它们不被 GC 管理。

分代回收

通常除 G1 收集器外,堆都被划分为 young 和 old 两个区域,yong 区域使用复制算法,old 区域使用标记整理算法。young 区域又划分为 eden、form and to 三个区域,给自的大小比例默认是 8:1:1。young 代先释放在 eden + form 未被标记的垃圾对象,随后将存活的对象存放到 to 区域,接着将 form 和 to 区域对调,如果对象存活周期>8,则将该对象分配至 old 区域,如果 old 区域内存不够,则会发生 full GC。 old 区域采用的是标记整理算法,释放垃圾对象后,整理零散的存活对象,提升空间利用率。

经典 GC 器

最常用有 CMS 和 G1 收集器。

CMS 收集器吞吐率高,STW 时间短,适合用在 WEB 系统中。

G1 的一大特点就是,没有把整个堆划分成 young 和 old 区域,而是划分成均匀的小内存块。

发布于: 2020 年 08 月 04 日阅读数: 66
用户头像

还未添加个人签名 2017.10.30 加入

半壁山房待明月,一盏清茗酬知音。

评论

发布
暂无评论
JVM垃圾回收原理简述