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

垃圾回收器如何确定哪些对象要回收---《深入理解java虚拟机》

时间:2015-04-08 21:40:27      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

垃圾回收器如何确定哪些对象要回收:

  1. 引用计数法

    很多教科书判断对象是否存活的算法是这样的:给对象添加一个引用计数器,每当有一个地发引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器都为0的对象就是不可能再被使用的。

    客观地说,引用技术算法的实现简单,判定效率也很高,在大部分情况下它都是一个不错的算法,也有一些比较著名的应用案例,例如微软的COM技术、使用ActionScript 3 的FlashPlayer、Python语言以及在游戏脚本领域中被广泛应用的Squirrel中都使用了引用计数算法进行内存管理。但是java语言中没有选用,其中最主要的原因是它很难解决对象之间的相互循环引用的问题

  1. 根搜索算法

    在主流的商用程序语言中(java和c#),都是使用根搜索算法(GC Roots Tracing)判断对象是否存活的。这个算法的基本思路就是通过一系列的名为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连(用图论的话来说就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的。 

在java语言里可作为GC Roots的对象包括下面几种:

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

  • 方法区中的类静态属性引用的对象。

  • 方法区中的常量引用的对象。

  • 本地方法栈中JNI(即Native方法)的引用的对象。

垃圾回收器如何确定哪些对象要回收---《深入理解java虚拟机》

标签:

原文地址:http://my.oschina.net/doctor2014/blog/397554

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