Java 如何防止值强引用其键?
一位比我好得多的程序员告诉我,他在一个Java 如何防止值强引用其键?,java,weakhashmap,strong-references,java-websocket,Java,Weakhashmap,Strong References,Java Websocket,一位比我好得多的程序员告诉我,他在一个WeakHashMap中持有一张他与java WebSocket的connections的映射。我自己查看了这个映射,它看起来很完美,因为连接将关闭,而负责保存映射的线程不会立即意识到这一点,从而允许对关闭的连接进行垃圾收集 在中,我注意到“WeakHashMap中的值对象由普通的强引用持有。因此,应注意确保值对象不直接或间接地强引用它们自己的键,因为这将防止键被丢弃。” 这是否意味着一个值在WeakHashMap中根本不应该引用它或任何其他键,这样就不会阻
WeakHashMap
中持有一张他与java WebSocket的connections的映射。我自己查看了这个映射,它看起来很完美,因为连接将关闭,而负责保存映射的线程不会立即意识到这一点,从而允许对关闭的连接进行垃圾收集
在中,我注意到“WeakHashMap中的值对象由普通的强引用持有。因此,应注意确保值对象不直接或间接地强引用它们自己的键,因为这将防止键被丢弃。”
这是否意味着一个值在WeakHashMap
中根本不应该引用它或任何其他键,这样就不会阻止垃圾收集
那么,一个值对其键的强引用究竟是如何生成的呢
例如,我需要保存一个与密钥(连接)关联的IP和DNS地址列表。如何确保这些不是对密钥的InetSocketAddress
的强引用,然后InetAddress
这是否意味着一个值在WeakHashMap
中根本不应该引用它或任何其他键,这样就不会阻止垃圾收集
值不应该引用自己的键,但可以引用其他键
那么,一个值对其键的强引用究竟是如何生成的呢
如果键是String
s,并且值具有String
数据字段,则可以将该String
字段设置为对象的键,以创建从值到其键的强引用
例如,我需要保存一个与密钥(连接)关联的IP和DNS地址列表。如何确保这些不是对密钥的InetSocketAddress
的强引用,然后InetAddress
InetAddress
没有对您从中获得它的连接的强引用。没有构造函数接受WebSocket
,因此InetAddress
无法引用您从中获得的WebSocket
。谢谢tbodt!键中的InetSocketAddress
值的字符串
是否为强引用?提前非常感谢!再次感谢您,tbodt!我对Java还是新手,所以您是否介意用示例更明确地解释一下InetAddress
值的List
是如何和不会强烈引用键的?我不确定如何防止这种情况,因为InetAddress
来自密钥。我用的是这个答案的前半部分。提前再次非常感谢您!即使InetAddress
来自键,但InetAddress
对键的引用并不强。