关于SoftReference被回收的时机

最近我一直在考虑SoftReference在什么时候会被垃圾回收器回收,最初我以为发生FullGC的时候,软引用就会被清除,最近我发现并不是这样的。
下面就上代码来说明关于软引用被回收的时机:

public class SoftReferenceTest {
	public static SoftReference<Student> studentSoftRef = new SoftReference<Student>( new Student(1, "张三")); 
	public static void main(String[] args) {
		 Runnable r1=()->{
			 while(true){
				 if(studentSoftRef.get()==null){
					 System.out.println("==="+studentSoftRef.get()+"===");
					 break;
				 }else {
					 System.out.println("==="+studentSoftRef.get()+"===");
				}
				 
			 }
		 };
		 Runnable r2=new Runnable() {	 
			@Override
			public void run() {
				 List<String> list=new ArrayList<>();
				 int index=1;
				 while(true){
					list.add((index++)+"");
				 }
			}
		};
		new Thread(r1).start();
		new Thread(r2).start();
	}
	public static class Student
    {  int id; 
       String name; 
       public Student(Integer id, String name)
       { 
    	   this.id = id; this.name = name; 
       }  
       @Override public String toString() 
       { 
    	   return "[id=" + id + ",name=" + name + "]";
       } 
    } 
}

在r1中不停地去检验软引用对象是否被清除,在r2中不停地往堆内存中加对象进去,促使该线程发生OOM。
下面就来

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值