架构师训练营 W09 作业
请简述 JVM 垃圾回收原理
可达性分析
从GC Roots
对象出发一路向下遍历,将遍历到的对象标记为可达,其他对象即不可达。其中GC Root
包括:栈中引用对象、方法区中的静态或是常量引用,以及本地方法栈中的 JNI 引用对象。
GC 算法
经可达性分析后,那些不可达的对象将等待回收。常用的回收算法有:
mark-sweep 标记清除法:将标记的回收区域直接清空
mark-copy 标记拷贝法:将内存对半分,总保留一半是空闲的;回收时,将零散存活的对象连续地复制到另一半的空闲内存区。
mark-compact 标记合并法:先清理垃圾对象,再挪动存活对象,并保证连续存储
generation-collect 分代收集算法
分代收集算法
垃圾回收器
垃圾回收器一直在发展,一共经历了四个阶段:
Serial(串行)收集器
Parallel(并行)收集器
CMS(并发)收集器
G1 收集器
主要说说 G1 收集器。G1 之前的 JVM 堆模型如上面分代收集算法提到的,分为新生代、老年代和永久代。G1 改变了这个模型,堆被分为多个大小连续的区域,这些区域被标记为 E、S、O 和 H,分别对应 Eden,Survivor,Old 区和巨型区。
G1收集器
G1 也有两种收集模式:
Young GC: 当 Eden 区达到一定阈值时触发;会将 Eden 和 Survivor 清理,并复制到 Old 区以及一部分 Survivor 区。
MixedGC:Old 区也达到一定阈值时,回收所有 Eden区、Survivor 区,以及部分 Old 区的内存。
版权声明: 本文为 InfoQ 作者【Geek_f06ede】的原创文章。
原文链接:【http://xie.infoq.cn/article/12ada5ab90eccfbf8a62a03e7】。未经作者许可,禁止转载。
评论