gpt4 book ai didi

java - List subList() 方法是否会阻止列表其余部分的垃圾回收?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:39:25 34 4
gpt4 key购买 nike

我很想知道最新的 JVM 如何处理通过以下方法保留的垃圾回收内存。

public List<Player> getHallOfFame() {
ArrayList<Player> listToSort = new ArrayList<Player>(map.values());
Collections.sort(listToSort, comparator);

return listToSort.subList(0, 5);
}

在最坏的情况下,我可以想象 JVM 将 listToSort 的全部内容保存在内存中,只要保留对子列表的引用即可。有谁知道事实是否如此?我对可以针对特定 JVM 以一种或另一种方式证明这一点的链接特别感兴趣。

最佳答案

是的,subList 只是现有列表的“ View ”。所有数据都在原始列表中。来自文档:

The returned list is backed by this list, so non-structural changes in the returned list are reflected in this list, and vice-versa.

所以是的,返回一个子列表将防止原始列表被垃圾收集。

如果你不想要那种效果,你基本上需要复制相关的子列表。例如:

return new ArrayList<Player>(listToSort.subList(0, 5));

关于java - List subList() 方法是否会阻止列表其余部分的垃圾回收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4179236/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com