在深入理解Java虚拟机这本书中又这么一段话`只被软引用关联着的对象,在系统将要发生内 存溢出异常前,会把这些对象列进回收范围之中进行第二次回收,如果这次回收还没有足够的内存, 才会抛出内存溢出异常。`
但是在我动手做实验的时候发现了一个问题,那就是在idea中使用Java8的环境,还是会爆出溢出,但是在Java11中却不会。
import java.lang.ref.SoftReference;
public class references {
public static void main(String[] args) {
SoftReference<byte[]> m = new SoftReference<>(new byte[1024 * 1024 * 10]);
System.out.println(m.get());
System.gc();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(m.get());
byte[] m2 = new byte[1024 * 1024 * 15];
System.out.println(m.get());
}
}