一、引用计数算法的概述
引用计数算法的实现很简单,其判断效率也很高,实现的基本思路是:给对象添加一个引用计数器,每当有一个地方引用 它时,计数器的值就会加1;当引用失效以后计数器的值就会减1;任何时刻计数器都为0的对象都是不能再被使用的对象。但是在Java语言中并没有使用引用计数器算法来管理内存,其主要原因是:它很难解决对象之间相互循环引用的问题。
举个简单的例子,请看代码中的testGC方法 :对象 objA 租objB 都有字段in tance,赋值令objA.instan =objB以及objB.instan =objA。除此之外,这两个对象再无任何引用,实际上这两个对象不可能再被访问,但是它们因为相互引用对方,导致计数器不为0,因此不能通过引用计数算法通知垃圾回收器回收它们。
二、浅谈引用
在JDK1.2 立后,Java 对引用的概念进行了扩充,将引用分为强引用 Strong Reference ) 、软引用 (Soft Reference) 、弱引用 (Weak Reference) 、虚引用 (Phantom Reference) 四种,这四种引用强度依次远惭减弱。
强引用:在程序代码中普遍存在的,类似于 Object obj = new Object() 这类的引用,只要强引用存在,垃圾回收器永远不会回收被引用的对象。
软引用:用来描述一些还有用,但并非必须的对象,对于软引用关联着的对象,在系统将要发生内存溢出、抛出异常之前,会把这些对象列入回收范围之内进行二次回收。如果这次回收后还没有足够的空间,则会出现加内存溢出。
弱引用:弱引用也是用来描述非必需对象的,但是它的强度比软引用更弱一些,被弱引用关联着的对象只能生存到下一次垃圾回收之前。当垃圾回收器工作时,无论内存是否溢出,该对象都会被垃圾回收器回收。
虚引用:也成为幽灵引用或者幻影引用,它是一种最弱的引用关系。一个对象是否有虚引用的存在,完全不会影响其生存时间,也我无法通过虚引用来获取一个对象的实例。为一个对象设置虚引用关联的唯一目的是希望能在这个对象呗回收时收到一个系统通知。
垃圾回收算法之引用计数算法
最新推荐文章于 2023-09-03 17:37:07 发布