首页 > 其他 > 详细

垃圾回收方法

时间:2020-06-05 20:27:14      阅读:47      评论:0      收藏:0      [点我收藏+]

1.引用计数法:

       给内存的对象弄上标记,被引用一次就加1,引用释放就减一,当为0时就可以被回收了。

      弊端:无法检测出循环引用。解决方案:第二种方法

技术分享图片

 

 

2.根可达性分析法:

      从根开始搜索所有可达对象,剩下的就是可回收的

    - java中可作为GC Root的对象有:

    * 虚拟机栈中引用的对象(本地变量表)

    * 本地方法栈中引用的对象

    * 方法区中静态属性引用的对象

    * 方法区中常量引用的对象

技术分享图片

 

  接下来就是根可达用哪些方法清除对象了:

   标记-清除:把可达性分析后剩下的对象直接清除。   弊端:会导致内存不连续(内存碎片)

   标记-整理:把可达性分析后确认仍被引用的对象向一端移动,清理掉边界以外的内存区域。解决了内存碎片化的问题

   复制:  将还存活着的对象复制到另外一块内存区域上面,然后再把已使用的内存空间一次清理掉,这样就不会导致内存碎片的问题。 弊端:内存压力大,每次只能使用一半的内存

   分代收集:  在新生代中,每次垃圾收集时都发现有大批对象死去,只有少量存活,那就选用复制算法,只需要少量存活对象的复制成本就可以完成收集。

                    而老年代中因为对象存活率高、没有额外空间对它进行分配担保,就必须使用“标记-清理”或者“标记一整理”算法来进行回收

 

垃圾回收方法

原文:https://www.cnblogs.com/jiex123/p/13051407.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!