JVM(三)_垃圾回收算法

引用计数算法

原理:在内存中该对象的引用做统计。增加一个引用,添加数量加一。减少一个引用,数量减一。当该对象的数量统计为0的时候,就可以回收了。

使用:微软的COM技术、ActionScript、Python等

优点:实现简单、效率高

缺点:循环没法统计

 

 

 

复制

原理:把内存分为两个区域,一个为空(from servivor),另一个处理业务(to servivor)。在from servivor区做垃圾回收时,没被使用的对象做GC,被使用的对象复制到to servivor区,from servivor清空。

优点:实现简单,高效,不会出现”碎片“的问题

缺点:空间利用率是以前的一半。

GC前

               from servivor                         to servivor

GC后

               from servivor                         to servivor

 

 

 

标记-清除算法:

原理:此算法分为两个阶段,第一阶段从根节点开始标记被引用的对象,第二阶段把没有被引用的对象删除。

特点:此算法需要暂停整个应用。

缺点:有碎片。

 

回收前

 

回收后

 

注:可以看到回收后只有“被引用的对象”存在,但内存不连续。有很多空的内存相隔在中间,这就是“”碎片”

 

标记整理算法:

原理:该算法结合了“标记清除”和复制算法的特点,分为三个阶段。第一阶段从根节点开始标记被引用的对象,第二阶段把没有被引用的对象删除,第三阶段把存回下来的对象压缩到一块,并按照顺序排放。

优点:避免了”标记-清除算法“的碎片问题。也避免了复制算法的两倍空间问题。

 回收前

回收后

 

posted on 2019-06-10 17:39  周公  阅读(231)  评论(0编辑  收藏  举报

导航