Java虚拟机——垃圾回收算法
GC:垃圾回收机制
JVM在进行GC时,并不是对三个区域统一回收,大部分时候,回收都是新生代(JDK8以后,永久区改了个名字,元空间)
- 新生代
- 幸存区
- 老年区
GC两种类:轻GC和重GC
引用计数法
复制算法
优势:没有内存碎片
不足:浪费了内存空间(to区总是空的)
复制算法最佳使用场景:对象存活率较低的时候
标记清除算法
优势:不需要额外的空间
不足:两次扫描,严重浪费时间,会产生内存碎片
标记压缩
优势:不会产生内存碎片
不足:三次扫描,时间成本过高
总结
内存效率:复制算法>标记清除算法>标记压缩算法
内存整齐度:复制算法=标记压缩算法>标记清除算法
内存利用率:标记压缩算法=标记清除算法>复制算法
没有最好的算法,只有最合适的算法---->GC:分代收集算法
年轻代:存活率低---->复制算法
老年代:存活率高---->标记清除+压缩算法