快速业务通道

关于JVM的垃圾收集(三) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
remove()以阻塞方式获取并移走对象,不见对象不死心                      System.out.println(queue.remove().get());                      System.out.println("线程获取到了引用队列中的对象");                  } catch (InterruptedException e) {                      e.printStackTrace();                  }              }          }.start();          System.out.println("等待3秒钟后把cow2编入队列...");          Thread.sleep(3000);          ref2.enqueue(); //把ref2所引用的对象cow2编入到引用队列中      } } class Cow{      private int num;      public Cow(int num){          this.num = num;      }      public String toString(){          return "This is Cow " + this.num;      } }

关于JVM的垃圾收集(三)(3)

时间:2011-01-08 BlogJava 隔叶黄莺

上面程序执行后的输出为:

null

This is Cow 1

等待 3 秒钟后把 cow2 编入队列...

This is Cow 2

线程获取到了引用队列中的对象

本想说明一下 Reference 的 clear() 方法的效果,但通过程序不容易展现出来。

当垃圾收集器决定收集软可触及的 Cow 对象时,它会清除 SoftReference (调用它的 clear() 方法),可能立即或在稍后把它所涉及的 Cow 对象放到引用队列中。何时加入队列是没法确定的,所以代码不好演示。

垃圾收集器要调用 Reference 的 enqueue() 方法就会把清除的对象加到引用队列中,当然你也可以手工调用该方法。在引用队列上可用 poll() 和 remove() 方法来获取对象,它们的区别是一个非阻塞,无对象立即返回 null,而 remove() 是阻塞的守候,不等到不罢休。

再来看看垃圾收集器对那三种引用对象的处理方式。

软引用:GC 可能回收它所引用对象占据的内存。如果发生了,便解除(clear()) 引用,并加入引用队列

弱引用:GC 必须归还它所引用对象占据的内存。如果发生了,便解除(clear()) 引用,并加入引用队列

影子引用:GC 立即把它所引用对象加入队列,但从不解除(clear())影子引用,所有的影子引用都必须由程序明确的清除。

缓存、规范映射和临终清理

软、弱、影子引用可分别为程序提供不同的服务。软引用可用来创建内存中的缓存;弱引用可以创建规范映射,如哈稀表,它的 Key 和 Value 可在无其他程序引用时从映射中清除;影子引用使你可实现除终结方法以外的更为复杂的临终清理策略。

软、弱引用未清除时,get() 能获取到相应对象,否则返回 null,而影子引用的 get() 方法总是返回 null。如果一个对象到达了影子可触及状态,它便不能再被复活了,等着被回收吧。

虚拟机在内存紧张时会考虑释放软、弱引用所关联对象占据的内存。所不同的是垃圾收集器这时候可自行决定是否清除软连接,但必须立即清除弱连接。弱引用的一个实现是 java.util.WeakHashMap 类。影子可触及对角表示对象即将被回收,影子引用对象创建时必须关联一个引用队列的。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号