2010-09-28 2 views
3

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

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

В конце концов, я знаю о финализаторах, но есть некоторая неопределенность и ухудшение производительности с использованием финализации.

Pls обеспечить некоторые идеи

ответ

4

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

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

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

+0

Возможны ли какие-либо возможности обнаружения аварии JVM и взять контроль над кодом, в котором я могу очистить открытые сокеты? Конечно, с вариантом финализатора. – user309281

+0

Также дайте мне знать, какой OS u означает, который позаботится об автоматическом закрытии системных ресурсов после сбоя процесса? Я запускаю свое приложение в HP-UX 11.2. – user309281

+1

@ user309281: Нет, если JVM сбой, тогда просто невозможно запустить какой-либо другой код Java внутри процесса сбоя. ОС будет очищаться после вас. Я ожидаю, что HP-UX будет надежным в этом отношении. –

1

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

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

Смежные вопросы