三、垃圾回收基础

一、目标

回收哪些对象、何时回收对象、如何回收对象

二、回收算法

1.引用计数法:判断对象引用,会出现死循环问题

2.标记-清除法:分为两阶段,第一阶段标记,第二阶段清除。从根节点开始进行可达性分析,对可达对象进行标记,第二阶段将不可达对象进行清除,会导致内存碎片,空间上的不连续,从而影响内存使用效率,一般针对老年代


标记-清除算法

3.复制算法

将内存分为相同的两份A和B,回收时将A工作内存中的存活对象复制到另一内存B,同时清空A,将B设置为当前工作内存。缺点是:浪费内存,当内存中对象存活率高的情况会变得耗时,在新生代的幸存区采用此方法进行垃圾回收

复制算法

4.标记-压缩算法

同标记-清理的前过程类似,只是第二阶段不会直接清除,而是将存活对象进行端移动,然后将端外的空间进行清理,从而达到内存空间地址上的连续,不会产生内存碎片,针对老年代等存活周期较长的对象的回收


标记-压缩算法

5.分代收集策略

针对不同的阶段设置不同的回收策略,其中分为年轻代、年老代、持久代,持久代一般是类信息,回收效果不明显,所以新生代和老年代是回收的重点对象。

年轻代:大部分是新对象,对象存活率低,采用效率较高的复制算法,进行MinorGC

年老代:经过多次gc后,对象存活时间长,存活率高,采用标记-压缩清除,进行Major-GC

当堆空间:年轻代和年老代内存都满了后会进行FullGC

持久代:类元信息,回收效果不明显

你可能感兴趣的:(三、垃圾回收基础)