gpt4 book ai didi

java - 有没有办法测试何时从弱集中删除元素?

转载 作者:行者123 更新时间:2023-11-30 02:40:15 24 4
gpt4 key购买 nike

在以下代码片段中(其唯一目的是教育测试),contains() 始终 ↲ true。

    Set<String> weakSet = Collections.newSetFromMap(new WeakHashMap<>());
weakSet.add("someKey");
System.gc();
weakSet.contains("someKey");

我希望best effort JVM 回收空间的方法包括删除仅弱可达的对象(没有任何强引用的弱集合元素)。但我错了。

那么,有没有一种方法可以在实践中测试自动删除弱引用,以便您可以看到引用消失了?换句话说,如何让 contains() 返回 false?

最佳答案

正如 @Chai T.Rex 在评论中正确提到的那样,字符串对于垃圾收集来说是一个糟糕的例子。要了解如何从弱集中垃圾收集对象,请尝试修改代码版本:

    Set<Object> weakSet = Collections.newSetFromMap(new WeakHashMap<>());
weakSet.add(new Object());
System.out.println(weakSet.size()); // prints "1"
while (weakSet.size() > 0)
System.gc();
System.out.println(weakSet.size()); // prints "0"

这里通常会发生什么:我们将新对象添加到集合中(weakSet.add(new Object()))。但由于我们没有保留任何引用,GC 会发现该对象将从集合中删除。

需要在 GC 上循环,因为在这个简单的示例情况下不能保证垃圾收集。

关于java - 有没有办法测试何时从弱集中删除元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41969104/

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