码迷,mamicode.com
首页 > 编程语言 > 详细

《深入理解Java虚拟机》笔记02 -- 垃圾收集算法

时间:2017-08-30 09:48:48      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:连续   移动   vivo   思路   其他   深入理解java   内存   png   java虚拟机   

1. 标记 - 清除算法

    先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。它是最基础的收集算法。其他收集算法都是根据其思路,改进其不足之处。

    缺点:1) 标记和清除两个阶段的效率都不高;2)清除后会产一大量不连续的内存碎片

技术分享

2. 复制算法

    将可用内存划分为大小相等的两块,每次只使用其中一块。当一块内存用完了,将还存活的对象复制到另一块,然后将使用过的那块全部清空。

    缺点:可使用内存仅为分配的一半,代价太高。

    这种算法主要用在新生代。新生代中大多数对象都是朝生夕死的,所以并不需要1:1来划分,而是分为一块较大的Eden区和两块较小的Survivor区,每次使用Eden和其中一块Survivor。当回收时,将Eden和Survivor中还存活着的对象一次性地复制到另外一块Survivor区,最后清理掉Eden和刚才用过的Survivor空间。HotSpot虚拟机默认的Eden和Survivor的大小比例是8:1。

3. 标记 - 整理算法

    标记过程与“标记 - 清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。

技术分享

4. 分代收集算法

    按照对象存活周期的不同,一般把Java堆分为新生代和老年代。新生代采用复制算法,老年代采用“标记 - 清理”或“标记 - 整理”算法。

《深入理解Java虚拟机》笔记02 -- 垃圾收集算法

标签:连续   移动   vivo   思路   其他   深入理解java   内存   png   java虚拟机   

原文地址:http://www.cnblogs.com/langfanyun/p/7045617.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!