二级java辅导:有关于JVM的垃圾收集(三)计算机二级考试

文章作者 100test 发表时间 2009:04:09 23:53:59
来源 100Test.Com百考试题网


  对象可触及时的生命周期
  在 JVM 1.2 之前,堆中的对象分为三种状态,分别是:
  1. 可触及的 -- 从根节点开始可追踪到
  2. 可复活的 -- 从根节点开始追踪不到,但有可能被终结方法触及并复活。不仅仅是那些声明了 finalize() 方法的对象,而是所有的对象都要经过可复活状态
  3. 不可触及的 -- 以上两种可能性都不存在,可以真正回收它们所占据的内存了
  版本 1.2 中,可触及按强弱进一步细分为:
  1. 强可触及 -- 即原来的可触及,从根节点开始的任何直接引用,如一个局部变量或任何从强可触及对象的实例引用的对象
  2. 软可触及 -- 表现为 SoftReference 所引用的对象
  3. 弱可触及 -- 表现为 WeakReference 所引用的对象
  4. 影子可触及 -- 表现为 PhantomReference 所引用的对象
  SoftReference、WeakReference、PhantomReference 都是 java.lang.ref.Reference 类的子类。强引用与这三种弱引用之间最基本的差别是,强引用禁止引用目标被垃圾收集,而那三种引用不禁止。
  要创建某一对象的软引用、弱引用或是影子引用,只需简单的包装一下。例如,创建一个 cow 对象的软用就写成:
  SoftReference softCow = new SoftReference(cow).  //对于 WeakReference 和 PhantomReference 都是一样的
  这里 softCow 是一个强引用,从 softCow 到 cow 是一个软引用,也就预示着垃圾收集器从根节点开始只能通过一个软引用才能触及到这个 cow 对象。要切断到 cow 的软引用,使之不再软可触及,可调用 softCow.clear(),要获取 cow 对象用 softCow.get()。
  可触及性状态的变化
  引入三个这样的引用对于虚拟机是有用处的,垃圾收集器对强引用对象是不能肆意妄为,但是它可随意更改百强可触及对象的可触性状态。在软引用、弱引用或者影子引用指向对象的可触及状态被垃圾收集器改变时,你可以获得这变化发生的通知,方法是要把引用对象和引用队列关联起来。
  引用队列是 java.lang.ref.ReferenceQueue 类的实例,垃圾收集器在改变可触及性状态时会把所涉及的引用对象编入到队列中。你只要设置并观察引用队列,便可异步得到通知了。
  下面用代码来演示一下 Reference、ReferenceQueue 与 Object 之间的关系,以及如何监听到可触及状态的变化。
  package com.unmi.ref.
  import java.lang.ref.ReferenceQueue.
  import java.lang.ref.SoftReference.
  /**
  * 测试 Reference
  */
  public class TestReference {
  public static void main(String[] args) throws InterruptedException {
  final ReferenceQueue queue = new ReferenceQueue().//引用队列
  //引用和引用队列进行关联
  SoftReference ref1 = new SoftReference(new Cow(1),queue).
  final SoftReference ref2 = new SoftReference(new Cow(2),queue).
  System.out.println(queue.poll()).//poll()方法取不到对象即刻返回 null
  ref1.enqueue(). //把 ref1 所引用的对象 cow1 编入到引用队列中
  System.out.println(queue.poll().get()). //用 poll() 取队列上的对象
  new Thread(){ //启动一个线程来监测引用队列中的对象

  2009年上半年全国计算机等级考试参考答案请进入计算机考试论坛

  2009年上半年全国计算机等级考试报名信息汇总

  2009年NCRE考试有新变化

  2009年全国计算机等级考试-大纲

  2009年上半年全国计算机二级考试试题及答案

  2009年上半年全国计算机等级考试试题答案汇总



相关文章


用p6spy来观察Java程序中执行的所有SQL语句计算机二级考试
计算机二级Java教程:针对接口编程的浅解计算机二级考试
二级java辅导:有关于JVM的垃圾收集(三)计算机二级考试
二级java辅导:有关于JVM的垃圾收集(二)计算机二级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛