文章目录
什么是垃圾
为什么需要GC
垃圾回收的主要区域
垃圾回收相关的算法
垃圾标记阶段
一、引用计数算法
二、(Java使用)可达性分析算法(根搜索算法、追踪性垃圾手机)
finalization机制
垃圾清除阶段
一、标记-清除算法
二、复制算法
三、编辑压缩算法
三种算法对比
分代收集算法
增量收集算法
分区算法
System.gc()的理解
内存溢出
内存泄露
Stop The World
垃圾回收的并发与并行
安全点
垃圾回收器
垃圾回收器分类
评估GC的性能指标
7款经典垃圾回收器
垃圾回收器组合关系
Serial回收器 与 Serial Old回收器:串行回收
新生代 : 复制算法
老年代: 标记-整理算法
ParNew回收器:低延迟 并行回收
新生代 : 复制算法
老年代: 标记-整理算法
Parallel Scavenge回收器: 并行回收 吞吐量优先
新生代 : 复制算法
老年代: 标记-整理算法
CMS回收器:并发回收 低延迟
老年代: 标记-清除算法
并发标记阶段,在遍历GCRoots,用户线程也在执行,若此时遍历过一个对象发现没有引用
但由于用户线程并发执行,这期间可能导致遍历过的这个对象又被其他对象引用
所以才需要重新标记阶段再遍历一遍看有没有漏标记的
否则就会导致被重新引用的对象被误清理掉
而浮动垃圾指的是并发标记和并发清理阶段,用户线程产生的新垃圾
G1垃圾回收器(区域化分代式)并行+并发
从局部(两个Region)之间上来看是基于==“复制”算法实现的。
无论如何,结论就是G1运行期间不会产生内存碎片==。
如果一个对象占用的空间超过了分区容量50%以上,G1收集器就认为这是一个巨型对象。
dirty card queue