Java虚拟机内存问题

我现在创建一个List<String>对象 list1 ,然后向里面插入大量数据,之后调用clear()方法。问:那些被插入的数据还会占用JVM内存吗?会在下一次的GC中被回收吗?

 

ThreadLocal:我现在有一个ThreadLocal<List<String>>对象,我先调用set()方法,然后调用remove(),方法,这个时候那个List会在下一次的GC中清除掉吗?如果我先调用List的clear()方法再调用remove()方法,这时List会被GC掉吗?

Java虚拟机内存问题,是有系统自动管理的,系统觉得没有用了就会回收,如果要强行回收可以调用

  • 调用System类的gc()静态方法:System.gc()

  • 调用Runtime对象的gc()实例方法:Runtime.getRuntime().gc()

  • clear以后是会回收的。最好设置为null.

List的clear方法是清除集合的元素,因此list对象会一直存在于内存中,但是元素占用内存会被回收 ThreadLocal在每次remove后会将set进去的元素清除,以释放内存,如果不手动remove的话,容易造成内存泄露

    ThreadLocal<List<String>> tt = new ThreadLocal<>();
    @Test
    public void testThreadLocal(){
        List<String> s = new ArrayList<>();
        s.add("ss");
        tt.set(s);
        List<String> tmp = tt.get();
        tmp.clear();
        tmp = null;
        tt.remove();
    }

不是很明白,我执行这样一段代码并没有什么问题啊。

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

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

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

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y