文章目录
- 引言
- I 标记回收算法(Mark-Sweep)
-
- 算法思路
- 不足
- II 复制算法(Copying)
-
- 算法的思路
- 缺点
- 案例
- III 标记整理算法(Mark-Compact)
-
- 思路
- IV 分代收集(以上三种算法的集合体)
-
- 分代收集算法思想
- 新生代算法:Minor GC使用复制算法
- 老年代 GC算法:(Major GC / Full GC)使用标记 - 整理算法。
- V 可达性分析算法(Reachability Analysis): 判定对象是否存活
-
- 算法思路
- 在 Java 中,可以作为 GC Roots 的对象
- VI 引用计数算法(Reference Counting)
-
- 算法思路
- 缺点
- VII 知识扩展
-
- HotSpot JVM heap区(堆内存)
- HotSpot JVM非heap区
- 查看JVM堆分配
引言
垃圾回收(Garbage Collection,GC)
Java支持内存动态分配、垃圾自动回收。JVM垃圾回收算法整体上来看是分代收集算法,而S0、S1这两部分可以看做是标记-整理算法
I 标记回收算法(Mark-Sweep)
算法思路
分为 “标记” 和 “清除” 两个阶段
- 标记出所有需要回收的对象
- 统一回收所有被标记的对象
不足
- 效率问题。标记和清除两个过程的效率都不高
- 空间问题。标记清除之后,会产生大量不连续的内存碎片,内存碎片太多可能会导致以后需要分配较大对象时,无法找到足够的连续内存,而不得不提前触发另一次垃圾回收动作,执行垃圾回收也是一个耗费资源的动作,执行频率过高,会影响到程序的整体执行效率。