JAVA的四种引用

JAVA的四种引用

强引用:

一个对象被一个强引用所持有,那么这个对象便不会被垃圾回收器回收。这也是我们最常用的引用方式。

特点:

  1. 可以直接访问目标对象
  2. 不会被垃圾回收器回收
  3. 可能会导致内存泄漏

举例:

	//这里Object便是被一个强引用所持有
	Object oj = new Object();

软引用:

一个对象若是具有软引用。那么,当内存足够时,及时垃圾回收器扫描到该对象,垃圾回收器也不会对该对象进行回收。若内存不足时,垃圾回收器扫描到该对象,便会回收这些对象的内存。

特点

  1. 通过SoftReference类来使用。
  2. 生命周期比强引用短。
  3. 当内存足够时,垃圾回收器不会对其指向的对象进行回收;内存不足时,当垃圾回收器扫描到该引用指向的对象时,便会回收该对象。
	//创建一个String类型的对象
	String str = new String();
	//将String类型的对象让软引用持有
	SoftReference<String> sr = new SoftReference<String>(str);

弱引用:

只具有弱引用的对象,会具有更短的生命周期。当垃圾回收器扫描到该引用指向的对象时,便会对对象进行回收。

特点:

  1. 具有更短的生命周期
  2. 通过WeakReference类实现
  3. 无论内存是否充足,当垃圾回收器扫描到该引用所持有的对象,便会对其对象进行回收
  4. 可以与引用队列 连用(ReferenceQueue)联用,当弱引用持有的对象被垃圾回收器回收,那么便将该引用添加到与之相关联的引用对象中。
	//创建一个String类型的对象
	String str = new String();
	//将String类型的对象让弱引用持有
	WeakReference<String> sr = new WeakReference<String>(str);

虚引用(幻象引用):

虚引用跟没有引用没有什么区别,因为它随时都会被回收,用来跟踪对象被垃圾回收器回收的活动,必须与引用队列连用。

特点:

  1. 通过PhantomReference类使用。
  2. 随时会被回收
  3. 用来跟踪对象被垃圾回收器回收的这个活动
  4. 必须与引用队列联用
	String str = new String();
	//创建一个引用队列
	ReferenceQueue<String> queue = new ReferenceQueue<String>();
	//使用虚引用持有对象,并将引用添加到关联的引用队列中
	PhantomReference<String> pr = new PhantomReference<String>(str, queue);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值