gpt4 book ai didi

java - Java WeakHashMap什么时候会清理null key?

转载 作者:行者123 更新时间:2023-12-02 08:31:24 27 4
gpt4 key购买 nike

在下面的代码中,在 name = nullSystem.gc() 之后,nameRef.get() 为 null 。

import java.lang.ref.WeakReference;

public class Main {

public static void main(String[] args) {
String name = new String("ltt");

WeakReference<String> nameRef = new WeakReference<>(name);
System.out.println(nameRef.get()); // ltt

name = null;
System.gc();

System.out.println(nameRef.get()); // null
}
}

WeakHashMap 基于 WeakReference。最后,我认为 map.size() 会是 0。事实上,它是 1。

import java.util.WeakHashMap;

public class Main2 {

public static void main(String[] args) {
String name = new String("ltt");
WeakHashMap<String, Integer> map = new WeakHashMap<>();
map.put(name, 18);
System.out.println(map.size()); // 1

name = null;
System.gc();

System.out.println(map.size()); // it's 1. why not 0 ?
}
}

Java WeakHashMap 什么时候会清理 null 键?

最佳答案

简单的答案:你不知道。

含义:您无法控制 jvm 何时启动并触发 GC 周期。您无法控制何时实际收集符合条件的对象。

因此,您无法知道该 map 的“状态”何时发生变化。

是的,另一部分是调用 System.gc() 只是建议 jvm 进行垃圾收集。在标准设置中,如果 jvm 遵循该请求或忽略它,您的控制权为零。例如,您需要使用非常特殊的 JVM 来改变这一点。

通常,gc 仅在 jvm 认为有必要时才运行。因此,只要内存不短缺,您的 map 可能会将其大小保持为 1。又如answer Holger 很好地概述了即使 GC 运行也不会强制 map 更新该部分。

关于java - Java WeakHashMap什么时候会清理null key?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54959146/

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