Previous | Next | Trail Map | Writing Java Programs | システム資源の使用


終了とガベージコレクションの強制

Java 実行時システムは、ユーザのためにメモリ管理タスクを実行する。 プログラムがオブジェクトを使用し終えた時、すなわち、これ以上オブジェクトへの参照がないと、オブジェクトは完了し、ガベージコレクトされる。

これらのタスクはバックグラウンドで非同期に行われる。 しかし、 System クラスで適切なメソッドを使用すると、オブジェクトの終了とガベージコレクションを強制することができる。

オブジェクトの終了

オブジェクトがガベージコレクトされる前に、 Java 実行時システムは(オブジェクトを)クリーンアップするためにオブジェクトに変更を加えるB このステップは終了として知られていて、オブジェクトの finalize() メソッドを呼び出すことで行われる。 オブジェクトは、ファイルとソケットのようなシステム資源を解放するような任意の final クリーンアップタスクを実行するために、 finalize() メソッドをオーバーライドするべきである。 finalize() メソッドの情報については、 finalize() メソッドの書き方(in the Writing Java Programs trail)を参照のこと。

通常、オブジェクトがガベージコレクトする前に、終了が発生する。 しかし、System の runFinalization() メソッドを呼び出すことにより、オブジェクト終了の発生を強制することができる。

System.runFinalization();

このメソッドは、終了を保留しているすべてのオブジェクトの finalize() メソッドを呼び出す。

ガベージコレクタの実行

System の gc() メソッドを呼び出すことにより、ガベージコレクタにいつでも実行するように要求することができる。

System.gc();

実行時システムが実行するのに都合が良い時よりも、プログラムの最も良い時期に確実にガベージコレクタを実行させたいことがある。 例えば、プログラムが計算やコードにおいてメモリを集中的に使用するセクションに入る前、あるいはアイドル時間があることが分かったときに、ガベージコレクトを実行したいことがある。 ガベージコレクタは、タスクを完成するために約20ミリ秒を必要とするので、プログラム性能に影響がない場合にのみガベージコレクタを実行するべきである。すなわち、プログラムはガベージコレクタがジョブを終了するのに十分な時間がもてるようにしておく。

Java のガベージコレクションスキーマについての一般的な情報については、 未使用オブジェクトのガベージコレクション(in the Writing Java Programs trail)を参照のこと。


Previous | Next | Trail Map | Writing Java Programs | システム資源の使用