Java アプリケーションは、不要になったときに閉じる必要がある IO ストリーム、ソケット、またはデータベース接続を使用する場合があります。
ただし、アプリケーションは (プロセスを強制終了するなどして) 終了する場合があります。この場合、使用済みのリソースはすべて解放されますか? OS と JRE のどちらがそれらを解放しますか?
Java アプリケーションは、不要になったときに閉じる必要がある IO ストリーム、ソケット、またはデータベース接続を使用する場合があります。
ただし、アプリケーションは (プロセスを強制終了するなどして) 終了する場合があります。この場合、使用済みのリソースはすべて解放されますか? OS と JRE のどちらがそれらを解放しますか?
JVM は、終了時にすべてのアクティブなリソースを解放します。ただし、これは相手側もリソースを解放することを保証するものではないため、リソースを明示的に閉じることは、すべてのプログラマーにとって最善の方法です。
明示的にストリームを閉じる代わりに、try-resource「ステートメント」と呼ばれる Java 7 が存在します。これは、finally
try ブロックの後のブロック内のリソースを閉じるのと同じです。詳細については、こちらを参照してください。
ソフトウェアがリソース管理を適切に処理しない場合、次のことが起こります。
Vulcan が述べたように、これらのいずれもが相手側で適切に処理されることを保証するものではありません。
3 番目の箇条書きはかなり一般的なものであることに注意してください。ほとんどのオペレーティング システムがこれを処理し、Java プラットフォームの内部とは関係ありません。これは、プロセスとリソースを独自に管理する OS に関するものです。
以下も参照してください。