Java软引用测试出现内存溢出

今日学习软引用时,按照示例编写的代码测试软引用在JVM内存不足时回收,遇到问题,请大神指点

测试的代码如下
 

public class T02_SoftReference {
    public static void main(String[] args) {
        SoftReference<byte[]> m = new SoftReference<>(new byte[1024 * 1024 * 10]);
//        m = null;
        System.out.println(m.get());
        System.gc();

        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(m.get());

        // 再分配一个数组,heap将装不下,这个时候系统会垃圾回收,先回收一次,如果不够,会把软引用回收
        byte[] b = new byte[1024 * 1024 * 15];
        System.out.println(m.get());
    }
}

idea配置此run的参数

运行时报错

按计划应该第三次m.get()应该是null,求指点

我把大小调整到 25 到时候就出现预期的情况了

你这个换成弱引用差不多能行,你这没内存泄露,就是单纯的OOM,我的理解是软引用JVM还是倾向于保留的

垃圾回收不要手动调用,垃圾回收调用了不一定会执行,只有内存不足时候才执行,否则只是尽量执行,jvm是会自动优化的

你这个设置堆内存太小,你一个

new byte[1024 * 1024 * 15]就把内存撑爆了,你直接把堆内存设置为30m,吧手动那行system.gc去掉,另外在启动参数加上-XX:+PrintGCDetails就能看到效果了。

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632