JVM回收算法
JVM垃圾回收算法分为三种:
1、标记清除法

将GC Root 对象引用的对象进行标记,然后将所有没有加标记的对象进行回收
GC Root 对象:
- 两个栈: Java栈 和 Native 栈中所有引用的对象;
- 两个方法区:方法区中的常量和静态变量;
- 所有线程对象;
- 所有跨代引用对象;
- 和已知 GCRoots 对象同属一个CardTable 的其他对象。
但是这个算法有一个很大的缺点,清除之后存在很多的内存碎片,之后并没有真正的空出很大的内存空间,依然不能够被连续使用,这个算法已经逐渐不被使用了(只有CMS回收器在用)
2、标记整理法

在标记清除的基础上进行,内存整理,将对象向一端移动,空余出较大的连续内存,解决了标记清除算法的致命性问题,但是也有对应的缺点,因为要进行移动,所以也会进行较大的性能消耗
经常用于老年代的垃圾回收,老年代的存活对象较多较大,移动的距离,次数也都较少。
3、标记复制法

将标记的对象复制到新的复制区,然后将左边的全部释放掉,效率要比标记整理算法高一点,缺点是需要占用一个额外的内存
经常用于新生代的垃圾回收,新生代的存活对象较少,工作量也较少,不适合老年代,老年代的内存空间本来就少,存活对象也比较多。

JVM垃圾回收算法
浙公网安备 33010602011771号