Гораздо лучший программист, чем я, сообщил мне, что он хранит карту своих WebSocket
соединений с java-websocket в файле WeakHashMap
. Я изучил эту карту для себя, и она кажется идеальной, поскольку соединение будет закрыто без немедленного уведомления потока, ответственного за удержание карты, что позволит собирать мусор для закрытых соединений.
В документах я заметил, что "The объекты значений в WeakHashMap хранятся с помощью обычных сильных ссылок. Таким образом, следует позаботиться о том, чтобы объекты значений не ссылались строго на свои собственные ключи, прямо или косвенно, поскольку это предотвратит отбрасывание ключей.».
Означает ли это, что значение никогда не должно ссылаться на свой или любой другой ключ в WeakHashMap
, чтобы не предотвратить сборку мусора?
А как именно делается сильная ссылка по значению на свой ключ?
Например, мне нужно хранить список IP- и DNS-адресов, связанных с ключом, соединением. Как я могу гарантировать, что это не сильные ссылки на ключ InetSocketAddress
, а затем InetAddress
?