2012-06-05 9 views
1

Приложения Java могут использовать потоки ввода-вывода, сокеты или соединения с базой данных, которые должны быть закрыты, когда они больше не нужны.Ресурсы, используемые приложением Java, освобождаются при завершении?

Однако приложения могут быть прекращены (например, путем уничтожения процесса). Будут ли освобождены все использованные ресурсы в этом случае? Кто их освободит: ОС или JRE?

+0

Я думаю, что они будут освобождены библиотеки, используемые для доступа к ресурсам, и если это не happe n, то JRE. – Hassan

+1

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

ответ

2

Если программное обеспечение не заботится управления ресурсами должным образом, произойдет следующее:

  • во время выполнения: виртуальная машина будет пытаться во время вашей программы, чтобы закрыть открытые потоки, если они» ре, казалось бы, не используются (во время циклов сбора мусора),
  • в точке завершения вашей программы: виртуальная машина должна закрыть открытые потоки оставлены открытыми для вашей программы всех видов,
  • на Точка завершения процесса JVM: операционная система позаботится о выпуске чего-либо, что JVM не было выпущено должным образом, если оно существует (надеюсь, или эта ОС имеет некоторые серьезные проблемы ...).

Как уже упоминалось, Vulcan не гарантирует, что на другом конце они будут правильно обработаны.

Обратите внимание, что 3-я маркерная точка является довольно общей: большинство операционных систем позаботятся об этом, и это не относится к внутренним компонентам платформы Java. Речь идет о том, что ОС самостоятельно управляет своими процессами и ресурсами.

Подробнее

Смотрите также:

4

JVM освободит все активные ресурсы после прекращения; однако это не гарантирует, что другой конец также освободит ресурс, поэтому явное закрытие ресурсов выполняется в интересах каждого программиста.

Альтернатива явно закрывающимся потокам существует в Java 7, называемой оператором try-resource, который является эквивалентом закрытия ресурса в блоке finally после блока try. Более подробную информацию об этом можно найти here.