Java中有四种引用类型:强引用、软引用、弱引用、虚引用。--应该是从1.2版本开始添加的。
这个概念是与垃圾回收有关的。
如果你不知道这几个概念,那你用的肯定都是强引用。例如String str = new String(); 这个str到 new String() 的引用类型就是强引用。
那什么是弱引用呢?先看一段代码:
1 packagecn.larry.pojo;2
3 public final classProduct {4 privateString name;5
6 publicString getName() {7 returnname;8 }9
10 public voidsetName(String name) {11 this.name =name;12 }13
14 }
View Code
1 packagecn.larry.test;2
3 importjava.util.HashMap;4 importjava.util.Set;5
6 importorg.junit.Test;7
8 importcn.larry.pojo.Product;9
10 public classWeakrefTest {11
12 @Test13 public voidrun1(){14 Product product =newProduct();15 product.setName("abc");16
17 HashMap map=new HashMap<>();18 map.put(product, 1231231);19
20 product=null;21
22 Set keySet =map.keySet();23 for(Product p : keySet) {24 System.out.println(p.getName());25 }26 }27 }
在上面的代码中,虽然在第20行已经将product引用置空(null),但是第24行的代码仍然可以访问到该引用最初指向的对象!
当然,我们可以手动的从HashMap中移除该对象,但我们更希望有一种机制来帮我们完成这个操作(从内存中移除对象而不导致问题)。弱引用就是这样的机制。
弱引用,就是引用与对象之间的联系很弱,弱到垃圾回收器会无视这个引用,直接回收对象。
软引用与弱引用类似,但只在内存不足时才会被回收。
虚引用最差,甚至不能通过引用获取对象,虚引用的目的仅仅是为了在对象被回收时将引用加入到引用队列中。
这里我们只讨论弱引用。JDK中提供了创建弱引用的方法,如下:
未完待续
原文:http://www.cnblogs.com/larryzeal/p/5831619.html