Java内存管理SoftReference 和 WeakReference

本文探讨了Java中SoftReference和WeakReference的使用场景及区别。SoftReference增强了引用在内存中的存活能力,适用于缓存资源,避免内存溢出的同时最大化内存利用。而WeakReference则主要用于防止内存泄漏,确保空引用能被及时回收。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在看工程源码的时候看到了SoftReference这个类。

用来缓存我们软件的一些图片,好奇。就看了看这个类的作用。

 

首先这篇文章要讲的是两个内存管理相关的类WeakReference和SoftReference。

 

首相SoftReference的用处是增强一个引用常驻在内存的能力。也就是说一个引用比如A a=new A();

此时如果你把a=null;那么在不久之后的某个时间点,java虚拟机的内存回收机制就会把这个引用所占用的内存释放掉。

 

如果有时候,我们想让一个引用常驻内存而不是被回收,则可以用到softreference,比如上文的a引用。

用:SoftReference sr=new SoftReference(a);

 

这段代码就可以让a引用常驻内存,不会被回收。那可能就有疑问了,如果空引用也不回收那么内存很容易就溢出了。但是softreference可以保证 在抛出OutOfMemory异常之前会让虚拟机回收那些已经为空的引用,防止异常的发生。这就是softreference大概的用处。

 

概括起来就是:用于实现一些常用资源的缓存,实现Cache的功能,保证最大限度的使用内存而不引起OutOfMemory异常。

 

weakReference一般用来防止内存泄漏,要保证内存被VM回收 

 

WeakReference,暂时我所了解的用处是当你想知道被设置为空的引用什么时候被回收时可以用到WeakReference。在代码上与SoftReference的用法是一样的。下面试一段简单的Demo代码

 

 

import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;

public class Test {
	
	public static void main(String[] args) throws InterruptedException
	{
		A a=new A();
		a.test();
		
		WeakReference wr=new WeakReference(a);
		//SoftReference sr=new SoftReference(a);
		a=null;
		while(true)
		{
		if(sr.get()!=null)
		{
			System.out.println("还没有被清楚");
		}else
		{
			System.out.println("已经被清除了");
			break;
		}
		
	}
	}
}


class A{
	public void test()
	{
		System.out.println("I am A");
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值