JVM回收算法

JVM垃圾回收算法分为三种:

1、标记清除法

 

 

 将GC Root 对象引用的对象进行标记,然后将所有没有加标记的对象进行回收

GC Root 对象:

    1. 两个栈: Java栈 和 Native 栈中所有引用的对象;
    2. 两个方法区:方法区中的常量和静态变量;
    3. 所有线程对象;
    4. 所有跨代引用对象;
    5. 和已知 GCRoots 对象同属一个CardTable 的其他对象。

但是这个算法有一个很大的缺点,清除之后存在很多的内存碎片,之后并没有真正的空出很大的内存空间,依然不能够被连续使用,这个算法已经逐渐不被使用了(只有CMS回收器在用)

2、标记整理法

 

在标记清除的基础上进行,内存整理,将对象向一端移动,空余出较大的连续内存,解决了标记清除算法的致命性问题,但是也有对应的缺点,因为要进行移动,所以也会进行较大的性能消耗

经常用于老年代的垃圾回收,老年代的存活对象较多较大,移动的距离,次数也都较少。

3、标记复制法

 

将标记的对象复制到新的复制区,然后将左边的全部释放掉,效率要比标记整理算法高一点,缺点是需要占用一个额外的内存

经常用于新生代的垃圾回收,新生代的存活对象较少,工作量也较少,不适合老年代,老年代的内存空间本来就少,存活对象也比较多。

 

posted @ 2021-10-03 20:39  郭恩泽  阅读(152)  评论(0)    收藏  举报
欢迎下次光临博客园