3

Java アプリケーションは、不要になったときに閉じる必要がある IO ストリーム、ソケット、またはデータベース接続を使用する場合があります。

ただし、アプリケーションは (プロセスを強制終了するなどして) 終了する場合があります。この場合、使用済みのリソースはすべて解放されますか? OS と JRE のどちらがそれらを解放しますか?

4

2 に答える 2

5

JVM は、終了時にすべてのアクティブなリソースを解放します。ただし、これは相手側もリソースを解放することを保証するものではないため、リソースを明示的に閉じることは、すべてのプログラマーにとって最善の方法です。

明示的にストリームを閉じる代わりに、try-resource「ステートメント」と呼ばれる Java 7 が存在します。これは、finallytry ブロックの後のブロック内のリソースを閉じるのと同じです。詳細については、こちらを参照してください。

于 2012-06-05T23:13:11.873 に答える
3

ソフトウェアがリソース管理を適切に処理しない場合、次のことが起こります。

  • 実行時: JVM は、(ガベージ コレクション サイクル中に) 使用されていないように見える場合、プログラムの実行中に開いているストリームを閉じようとします。
  • プログラムの終了点: JVM は、プログラムによって開かれたままになっているすべての種類の開いているストリームを閉じる必要があります。
  • JVM のプロセス終了点:オペレーティング システムは、JVM が存在するときに、JVM によって適切にリリースされていないものをすべてリリースします (できれば、この OS に深刻な問題があることを願っています...)。

Vulcan が述べたように、これらのいずれもが相手側で適切に処理されることを保証するものではありません。

3 番目の箇条書きはかなり一般的なものであることに注意してください。ほとんどのオペレーティング システムがこれを処理し、Java プラットフォームの内部とは関係ありません。これは、プロセスとリソースを独自に管理する OS に関するものです。

より詳しい情報

以下も参照してください。

于 2012-06-06T00:47:05.470 に答える