架构师训练营 - 第九周
整理: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
评论