码迷,mamicode.com
首页 > 编程语言 > 详细

Java的四种引用类型

时间:2016-09-02 00:25:13      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:

Java中有四种引用类型:强引用、软引用、弱引用、虚引用。--应该是从1.2版本开始添加的。

这个概念是与垃圾回收有关的。

如果你不知道这几个概念,那你用的肯定都是强引用。例如String str = new String(); 这个str到 new String() 的引用类型就是强引用。

 

那什么是弱引用呢?先看一段代码:

技术分享
 1 package cn.larry.pojo;
 2 
 3 public final class Product {
 4     private String name;
 5 
 6     public String getName() {
 7         return name;
 8     }
 9 
10     public void setName(String name) {
11         this.name = name;
12     }
13     
14 }
View Code
 1 package cn.larry.test;
 2 
 3 import java.util.HashMap;
 4 import java.util.Set;
 5 
 6 import org.junit.Test;
 7 
 8 import cn.larry.pojo.Product;
 9 
10 public class WeakrefTest {
11 
12     @Test
13     public void run1(){
14         Product product =new Product();
15         product.setName("abc");
16         
17         HashMap<Product,Integer> map=new HashMap<>();
18         map.put(product, 1231231);
19         
20         product=null;
21         
22         Set<Product> keySet = map.keySet();
23         for (Product p : keySet) {
24             System.out.println(p.getName());
25         }
26     }
27 }

在上面的代码中,虽然在第20行已经将product引用置空(null),但是第24行的代码仍然可以访问到该引用最初指向的对象!

当然,我们可以手动的从HashMap中移除该对象,但我们更希望有一种机制来帮我们完成这个操作(从内存中移除对象而不导致问题)。弱引用就是这样的机制。

 

弱引用,就是引用与对象之间的联系很弱,弱到垃圾回收器会无视这个引用,直接回收对象。

软引用与弱引用类似,但只在内存不足时才会被回收。

虚引用最差,甚至不能通过引用获取对象,虚引用的目的仅仅是为了在对象被回收时将引用加入到引用队列中。

 

这里我们只讨论弱引用。JDK中提供了创建弱引用的方法,如下:

 

 

 

未完待续

 

Java的四种引用类型

标签:

原文地址:http://www.cnblogs.com/larryzeal/p/5831619.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!