最近在看JVM优化相关的书,我使用jdk8,设置最大堆内存为10MB,在idea中执行以下代码
期望最后一行代码打印的结果为“null”,但是结果只有两种,要么软引用的user对象仍然存在,要么报内存溢出,大家能否帮我分析一下可能是什么原因
import java.lang.ref.SoftReference;
public class SoftRef {
public static class User{
public int id;
public String name;
public User(int id,String name){
this.id = id;
this.name =name;
}
@Override
public String toString(){
return "{id="+String.valueOf(id)+",name="+name+"}";
}
}
public static void main(String[] args) {
User u = new User(1,"RYU");
SoftReference userSoftReference = new SoftReference<>(u);
u = null;
System.out.println(userSoftReference.get());
System.gc();
System.out.println("After GC:");
System.out.println(userSoftReference.get());
byte[] b=new byte[1024*925*7];//约申请7MB空间
System.gc();
System.out.println(userSoftReference.get());
}
}