Java 内存回收机制(一)

来源:互联网 发布:js报表框架 编辑:程序博客网 时间:2024/04/30 12:34

    与C/C++相比,Java的内存回收机制,无疑极大的方便了程序员的开发工作。下面我对Java内存回收机制的一些理解,欢迎大家一起来讨论一下。

   一、如何判断一个对象是否可回收。

        判断一个对象是否可回收实际上就是就是判断是否还有引用指向该对象的实际数据。常用的判断方法主要有:1、引用计数器法,2、可达性分析算法。

       1、引用计数器算法

        其算法具体实现过程如下:每个对象维护一个引用计数器,每当有一个地方引用到它时,计数器值加1,当引用失效时,计数器值减一。任何时刻计数器为零的对象,就当做不可使用对象。

        采用引用计数器算法其实现上比较简单,执行效率也比较高。但是不能解决循环引用的问题。

        例如存在着两个对象ObjA与objB,并且在这两个对象中,都存在一个Instance字段。将其赋值如下:ObjA.instance=objB ;objB.instance=objA;

假设此时这两个对象再无其他引用,但是由于他们相互引用对方,导致引用计数值都不为零,此时引用计数器无法通知GC回收他们。


      2、可达性分析算法

         基本上在主流的商用开发语言中,垃圾回收机制都采用的是可达性分析算法。Java的可达性分析算法如下:

        算法的起点为一个GC Root对象;GC root对象主要是指虚拟机栈中的引用对象,方法区的静态属性引用对象常量引用对象。本地方法区的饮用对象。(关于Java内存分区详见参考Java 虚拟机内存)

       可达性分析算法: 从GC root节点开始向下搜索,其搜索路径称为引用链,当一个对象到GC root不包含任何引用链时,就称该对象不可达。不可达的对象就是可回收对象。

      







  

        

    

0 0
原创粉丝点击