如何强制 JVM 清除 WeakHashMap 的所有 WeakReferences/keys

MRa*_*ser 5 java garbage-collection jvm memory-leaks weak-references

有没有办法强制 jvm 清除所有WeakReferences(或 a 的所有键WeakHashMap),如果它们不再被常规引用引用?

触发垃圾收集将不起作用,弱引用仍然存在。(我读到弱引用只有在内存不足时才会被清除)。

Dar*_*les 2

当内存不足时,软引用将被清除。

弱引用被更频繁地清除(就像对象仅剩弱引用时的所有时间一样)

查看该包的官方 Java 文档(包文档对于解释很有用): http://download.oracle.com/javase/1.5.0/docs/api/java/lang/ref/package-summary.html

您能引用在关闭时从 Tomcat 看到的确切消息吗?你确定你没有误解它吗?对于 Tomcat 来说,重要的是没有硬引用为 ServletContext 固定 ClassLoader。

Re WeakHashMap:http://download.oracle.com/javase/1.5.0/docs/api/java/util/WeakHashMap.html 只有键是弱持有的。你用什么作为“价值”?该值是否强烈地自我引用自己的“密钥”?借此,我质疑您对 WeakHashMap 为您提供什么的理解(假设它是完成这项工作的正确工具)。

根据我的经验,您可以在第一次 GC 扫描时使用 System.gc() 100% 可靠地清除 Sun JVM 5 的 WeakReferences。但他们并不能保证这一点。