Освобождаются ли ресурсы, используемые приложением Java, когда оно завершается?

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

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


person Andrei Botalov    schedule 05.06.2012    source источник
comment
Я думаю, их освободят библиотеки, используемые для доступа к ресурсам, а если этого не произойдет, то и JRE.   -  person Hassan    schedule 06.06.2012
comment
Это очень широкий вопрос. Все, что инициализировано JVM, будет освобождено, когда процесс завершится, но это не гарантирует, что другой конец соединения (например) освободит свои ресурсы.   -  person Nathaniel Ford    schedule 06.06.2012


Ответы (2)


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

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

Как упоминал Вулкан, ничто из этого, очевидно, не гарантирует, что с ними будут правильно обращаться на другом конце.

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

Больше информации

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

person haylem    schedule 06.06.2012

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

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

person FThompson    schedule 05.06.2012