我的bug呢 2023-05-22 09:30 采纳率: 57.1%
浏览 37
已结题

Java中,这样的List会被回收吗

  //1.查询数据
        List<VO> vos = mapper.query(queryParamDTO);
        vos.parallelStream().forEach(e -> {
            String json = JSONObject.toJSONString(e.getList());
            e.setMergedChanges(json);
            //避免占用内存
            e.setList(null);
        });
        return vos;

就是说,每个VO中的List合并成Json后都不再需要了,然后我将其置为null,想让垃圾回收器去回收,可以吗?

  • 写回答

5条回答 默认 最新

  • 瞬间的未来式 2023-05-22 09:34
    关注

    首先我先明确一点,垃圾回收是jvm内部机制,并不是我们能控制的,所以在开发过程中一般不用考虑垃圾回收,只要编码规范即可
    该回答引用chatgpt:
    你将每个 VO 对象中的 List 转换为 JSON 字符串后,将 List 设置为 null 可以让垃圾回收器回收这些不再需要的对象。

    当你将一个对象的引用设置为 null 后,该对象就变得不可达,即没有任何引用指向它了。垃圾回收器在运行时会扫描内存中的对象,并检测到这些不可达的对象,将它们标记为垃圾对象,然后在适当的时候回收它们所占用的内存空间。

    在你的代码中,通过将每个 VO 对象中的 List 设置为 null,你告诉垃圾回收器这些 List 对象不再需要,可以被回收。当垃圾回收器执行时,它会检测到这些不可达的 List 对象,并在适当的时候将它们回收。

    需要注意的是,垃圾回收器的具体行为是由 JVM(Java 虚拟机)来管理的,并且垃圾回收的时机和方式可能因为不同的 JVM 实现而有所差异。但是一般来说,通过将不再需要的对象设置为 null,可以提供给垃圾回收器更好的机会来回收这些对象所占用的内存。

    需要注意的是,并非所有对象都能立即被垃圾回收器回收,而是在垃圾回收器运行时根据一定的策略来确定对象是否需要回收。垃圾回收的具体时机和方式是由 JVM 决定的,并且可能会受到 JVM 的配置参数和运行环境的影响。

    总之,通过将不再需要的对象设置为 null,可以为垃圾回收器提供更好的回收机会,但具体的回收时机和方式仍由 JVM 决定。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 6月9日
  • 已采纳回答 6月1日
  • 创建了问题 5月22日

悬赏问题

  • ¥15 请问为什么我配置IPsec后PC1 ping不通 PC2,抓包出来数据包也并没有被加密
  • ¥200 求博主教我搞定neo4j简易问答系统,有偿
  • ¥15 nginx的使用与作用
  • ¥100 关于#VijeoCitect#的问题,如何解决?(标签-ar|关键词-数据类型)
  • ¥15 一个矿井排水监控系统的plc梯形图,求各程序段都是什么意思
  • ¥50 安卓10如何在没有root权限的情况下设置开机自动启动指定app?
  • ¥15 ats2837 spi2从机的代码
  • ¥200 wsl2 vllm qwen1.5部署问题
  • ¥100 有偿求数字经济对经贸的影响机制的一个数学模型,弄不出来已经快要碎掉了
  • ¥15 数学建模数学建模需要