垃圾回收算法详解
垃圾回收算法详解
概述
垃圾回收是JVM自动管理内存的机制,主要有四种算法。
核心算法
标记-清除(Mark-Sweep)
- 分两阶段:标记可达对象、清除未标记对象
- 优点:算法简单
- 缺点:产生内存碎片
复制算法(Copying)
- 内存分为两个等大小区域,存活对象复制到另一个区域
- 优点:无内存碎片
- 缺点:浪费一半内存,适用于新生代
标记-整理(Mark-Compact)
- 标记可达对象,将存活对象压缩到一端
- 优点:无碎片,内存利用率高
- 缺点:算法复杂,需要移动对象
分代收集(Generational Collection)
- 新 代用复制算法,老年代用标记-整理算法
- 基于假设:新生对象易死,老年对象难死
常见问题
Q: 为什么新生代用复制,老年代用标记-整理?
A: 新生代对象存活率低适合复制,老年代存活率高不浪费空间
Q: 什么是GC停顿?
A: GC运行时JVM暂停所有用户线程(Stop The World)
Q: 如何减少GC停顿时间?
A: 使用低延迟收集器如G1GC、ZGC
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 kaii的博客!
