LINUX.ORG.RU

И он сам не закрывается. Как мне его найти в jvm и закрыть?

Если ты вычислял его «недавно» (т.е. не выполнял вычислений после этой формы), то можешь воспользоваться спец-переменными *1, *2, *3

Если ссылок на этот объект вообще не осталось, то (System/gc) соберёт сокет, вызовет finalize, который закроет порт.

anonymous
()
Ответ на: комментарий от Int0l

Что то не собирает. Через сколько минут он соберет?

Это всё зависит от версии JRE, настроек GC и прочего. Можешь попробовать вызвать (System/runFinalization) для принудительного вызова финализаторов, но гарантий что он финализируется тебе никто не даст - его мог не пометить GC по какой-то причине и тогда он будет висеть открытым.

anonymous
()
Ответ на: комментарий от Int0l

Не помогает. А у Вас GC удаляет socket?

Да, после того как пропадут все ссылки не него. т.е. примерно так

(import java.net.DatagramSocket)
=> java.net.DatagramSocket
(DatagramSocket. 33222)
=> #object[java.net.DatagramSocket 0x445157b9 "java.net.DatagramSocket@445157b9"] ; Порт открылся - его видно в netstat
(System/gc)
=> nil ; Здесь сокет открыт потому что была ссылка в *1
(System/gc)
=> nil ; Здесь сокет ещё открыт потому что была ссылка в *2
(System/gc) 
=> nil ; Здесь сокет ещё открыт потому что была ссылка в *3
(System/gc)
=> nil ; Здесь сокет закрылся, потому что ссылок на него не осталось
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.