首页 > 代码库 > Java的四种引用类型
Java的四种引用类型
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 }
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 @Test13 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的四种引用类型
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。