java垃圾回收算法-入门级理解

it2023-04-06  78

1.标记-清除算法

说明:对可回收的空间进行标记,回收垃圾时对已标记的空间进行回收。

优点:简单,快速

缺点:会产生不连续空间碎片。

2.复制算法

说明:对内存空间进行分半,对其中一半进行使用,当空间不足时,将使用的那一步进行整理、回收后移动至未使用的另一半内存控件。

优点:不会产生不连续空间碎片,内存是整整齐齐的。

缺点:空间的浪费(会存在一半的空间浪费)、需要对内存进行移动存在风险

3.标记-整理算法

说明:在回收前,对所有的可回收的内存进行标记,垃圾回收时,把存活的内存进行的整理,剩下的直接进行回收。

优点:不会产生不连续空间碎片,内存是整整齐齐的。

缺点:需要对内存进行移动存在风险

 

 

上面的回收机制都存在着各自的缺点,那么在java中gc用的哪种呢?

回答是:这三种方式配合的使用,组成了多种的回收机制策略。

 

在此前提,还需要了解一个东西,堆中的划分(新生代 - 老年代)

新生代 ====》    Eden :Survivor:Survivor   8:1:1   

            ====》    E :S1:S2   

            ====》   第一次GC   E 和S1存活的放在 S2   

            ====》   第二次GC   E 和S2存活的放在 S1 

            ====》   循环数次后

            ====》  将存活次数超多15次(默认值,可配置)的空间,存放至老年代。

新生代 一般使用 (复制算法)minor GC

老年代 根据算法的不同,使用的算法也不同。

 

 

 

 

 

 

 

最新回复(0)