0

一个比我优秀得多的程序员告诉我,他WebSocketWeakHashMap. 我自己查看了该地图,它看起来很完美,因为连接将关闭,而负责保持地图的线程不会立即意识到,从而允许对关闭的连接进行垃圾收集。

文档中,我注意到“WeakHashMap 中的值对象由普通的强引用保存。因此应注意确保值对象不会直接或间接地强引用它们自己的键,因为这会阻止密钥被丢弃。”。

这是否意味着一个值根本不应该引用它的或任何其他键,WeakHashMap以免阻止垃圾收集?

值对它的键的强引用究竟是如何产生的?

例如,我需要保存与密钥(连接)关联的 IP 和 DNS 地址列表。我如何确保那些不是对密钥的强引用InetSocketAddressthen InetAddress

4

1 回答 1

1

这是否意味着一个值根本不应该引用它的或任何其他键,WeakHashMap以免阻止垃圾收集?

一个值不应该引用它自己的键,但它可以引用其他键。

值对它的键的强引用究竟是如何产生的?

如果键是Strings,并且值具有String数据字段,则可以将该String字段设置为对象的键,以创建从值到其键的强引用。

例如,我需要保存与密钥(连接)关联的 IP 和 DNS 地址列表。我如何确保那些不是对密钥的强引用InetSocketAddressthen InetAddress

AnInetAddress对您从中获得它的连接没有强烈的参考。没有使用 a 的构造函数WebSocket,因此 anInetAddress将无法引用WebSocket您从中获取的。

于 2014-02-03T00:15:45.273 回答