java的四种引用类型_Java的四种引用类型

本文介绍了Java中的弱引用概念,弱引用允许对象在内存不足时被垃圾回收。通过一个示例展示了即使对象的强引用被置为null,只要在HashMap中存在弱引用,对象仍可被访问。弱引用是垃圾回收机制的一部分,帮助优化内存使用。同时,文章提到了软引用和虚引用的区别,强调弱引用在不需要直接访问对象但又希望在对象回收时得到通知的场景中的作用。
摘要由CSDN通过智能技术生成

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

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

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

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

cdec0645add3fc3c328197dda5c76203.png

81178cc93a2a3bb5048d90d76e7ec935.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值