二:GC算法

1.标记清除算法:分为两个阶段标记阶段和清除阶段。首先从根集合进行扫描,标记存活的对象。标记完成后,再扫描整个空间未被标记的对象并进行回收。

不足:1.效率问题,标记和清除效率不高

           2.在GC的时候会造成GC停顿,响应延迟

           3.由于标记-清除算法,不会对存活的对象进行移动,会导致大量的内存碎片,在需要分配大对象时,无法分配内存会触发fullgc.

2.复制算法:为解决标记算法的效率以及内存问题,诞生出复制算法,复制算法将内存分为大小相等的两块,当内存用完,会将存活的对象复制到另外一块内存,然后在把已使用过的内存空间一次清理掉,这种算法适用于存活率比较低的场景。

优点:没有标记和清除阶段,效率高。保证了内存的连续性。

缺点:需要两倍的内存。在对象存活率高的情况下比较花费时间

3.标记整理算法:让所有存活的对象都向一端移动,然后清理端边界以外的内存

优点:消除了标记清除算法的内存碎片问题,消除了复制算法空间的问题

缺点:移动对象时需要改变对象引用,  

     移动过程会暂停应用

 

4.分代收集算法:基于不同对象在不同阶段的生命周期是不一样的,因此不同生命周期的对象可以采用不同的收集的方式,以便提高效率。

新生代:对象存活率低,回收频繁,适合用复制算法效率高

老年代:对象存活高,回收不频繁,适合用标记整理算法

 

5.分区算法:在相同条件下,堆空间越大,一次GC时所需要的时间越长,为了更好的控制GC产生的停顿时间,将 一大块内存区域分割成多个小块,根据目标的停顿时间,每次合理回收若干个区间,从而减少GC产生的停顿。分代算法按照对象生命周期的不同划分为两个部分,分区算法将整个堆划分为 连续不同的小区间,每个小区间单独使用,单独回收,这个算法的好处可以控制一次回收多个小区间。

 

posted on 2022-03-02 13:52  云中哥  阅读(46)  评论(0编辑  收藏  举报

导航