写点什么

架构师训练营 - 第九周

用户头像
袭望
关注
发布于: 2020 年 11 月 23 日

整理:JVM 垃圾回收原理



目前主流的是分代收集算法,分为年轻代、老年代。



年轻代

一般是分为3个区,Eden和两个Survivor区大小分配默认8:1:1。

Eden 新建的对象都存在这个区

Survivor 分为From Survivor 和To survivor两个小区域

每次触发young gc时,会将Eden区中所有存活的对象复制到To Survivor区,之后判断From Survivor区内的对象存活次数(依靠标记在对象Header内的记录),判断是放入To Survivor还是放入老年代,之后清理Eden和From Survivor两个区,再把当前的From和To相互置换,完成一次GC。

(此时所有存活的对象都放入了置换后的From survivor中)



老年代

目前主流的是G1回收器和CMS回收器来进行Full GC;

CMS是标记-清除算法,包含了初始标记(暂停)、并发标记、重新标记(暂停)、并发清除4个阶段;

它的缺点一般是对CPU较为敏感,需要配置启动线程数;每次算法都会产生大量的碎片。

G1回收器是java8开始的新型回收器,它将老年代划分成了很多个小区域,每个区域又各有职责(Eden、Survivor等),动态的去调整执行gc

用户头像

袭望

关注

还未添加个人签名 2018.08.13 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 - 第九周