JVM аварийный выход - очистка системных ресурсов - PullRequest
3 голосов
/ 28 сентября 2010

У меня есть Java-программа, в которой сервер-сокет слушает бесконечно.В случае аварийного выхода JVM через kill pid, что происходит с системными ресурсами в этом случае, объектом сокета?Будут ли освобождены сокеты или он будет заблокирован?

Каков наилучший способ очистки системных ресурсов, таких как дескрипторы файлов / подключение к сетевому сокету / jdbc, в случае аварийного выхода из JVM.

Наконец-то я знаю о финализаторах, но есть некоторая неопределенность и снижение производительности при использовании финализации.

Просьба предоставить некоторые идеи

Ответы [ 2 ]

4 голосов
/ 28 сентября 2010

В случае аварийного выхода очевидно, что JVM не может ничего сделать специально для очистки того, что было выделено.Эта ответственность будет лежать рядом с самой операционной системой.

Для сокетов современные операционные системы обязательно освободят все сокеты, которые были открыты в результате сбоя процесса.То же самое относится к файлам и любым другим объектам ядра (соединения JDBC реализованы с помощью какого-либо сокета).

Финализаторы не будут запускаться, если JVM завершается ненормально.

1 голос
/ 28 сентября 2010

Системные ресурсы, такие как память, файловые дескрипторы и сетевые сокеты, освобождаются при выходе из JVM. Соединения с сетевыми сокетами будут закрываться из-за сетевых протоколов.

Соединения JDBC должны быть освобождены, как только база данных узнает, что другой конец соединения закрыт. Таймеры поддержания активности могут помочь очистить соединение быстрее. База данных будет очищать открытые транзакции и снимать блокировки при очистке соединений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...