Chinaunix首页 | 论坛 | 博客
  • 博客访问: 286113
  • 博文数量: 115
  • 博客积分: 1951
  • 博客等级: 上尉
  • 技术积分: 728
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-26 14:05
文章分类

全部博文(115)

文章存档

2013年(4)

2012年(3)

2011年(26)

2010年(56)

2009年(26)

我的朋友

分类: Java

2010-04-07 23:40:25

         Java 中一共有 4 种类型的引用 : StrongReference、 SoftReference、 WeakReference 以及 PhantomReference (传说中的幽灵引用 呵呵),
这 4 种类型的引用与 GC 有着密切的关系,  让我们逐一来看它们的定义和使用场景 :

        1. Strong Reference
       
        StrongReference 是 Java 的默认引用实现,  它会尽可能长时间的存活于 JVM 内, 当没有任何对象指向它时 GC 执行后将会被回收
Java代码 复制代码
  1. @Test  
  2. public void strongReference() {   
  3.     Object referent = new Object();   
  4.        
  5.     /**  
  6.      * 通过赋值创建 StrongReference   
  7.      */  
  8.     Object strongReference = referent;   
  9.        
  10.     assertSame(referent, strongReference);   
  11.        
  12.     referent = null;   
  13.     System.gc();   
  14.        
  15.     /**  
  16.      * StrongReference 在 GC 后不会被回收  
  17.      */  
  18.     assertNotNull(strongReference);   
  19. }   





        2. WeakReference & WeakHashMap

WeakReference, 顾名思义,  是一个弱引用,  当所引用的对象在 JVM 内不再有强引用时, GC 后 weak reference 将会被自动回收

Java代码 复制代码
  1. @Test  
  2. public void weakReference() {   
  3.     Object referent = new Object();   
  4.     WeakReference weakRerference = new WeakReference(referent);   
  5.   
  6.     assertSame(referent, weakRerference.get());   
  7.        
  8.     referent = null;   
  9.     System.gc();   
  10.        
  11.     /**  
  12.      * 一旦没有指向 referent 的强引用, weak reference 在 GC 后会被自动回收  
  13.      */  
  14.     assertNull(weakRerference.get());   
  15. }