C、C ++のような言語とJAVAの大きい違いの一つがゴミ収集(以下GC)システムです。
直接アドレスを管理するC,C++と違い、
アドレスデータの管理をJava環境ではGCアルゴリズムによって扱われます。
過去、JavaのGCアルゴリズムが今ほど優れず、
問題になったことがありましたが、今では大いに改善されました。
public static void main(String[] args){
System.runFinalization();
System.gc();
}
JavaでGCを呼び出す方法です。
GCはJVMごとに呼び出される時点が異なり、メモリの空き状況に影響を受けるため、
制御し難い特性を持ちます。
このメソッドを使えば間接的な呼び出しが出来ます。
ただし、JAVAでGC呼び出しは
CやC ++のようにすぐに実行されるわけではございません。
いくつかのオブジェクトへの参照が消えてから呼び出しても
いくつかのオブジェクトへの参照が消えてから呼び出しても
実際に消去されるまでには時間がかかります。
このため、重要ステータス情報をGCに任せるのはいい方法じゃありません。
System.gcやSystemrunFianlization()の問題は、
このため、重要ステータス情報をGCに任せるのはいい方法じゃありません。
System.gcやSystemrunFianlization()の問題は、
常にすべてのメモリを参照することです。
この作業は、とても大きいリソースを消費し時間がかかる作業です。
一方、JVMの自動的処理に任せれば、GCはメモリの流れを読み取り
この作業は、とても大きいリソースを消費し時間がかかる作業です。
一方、JVMの自動的処理に任せれば、GCはメモリの流れを読み取り
部分的/全体のゴミを収集して効率的にメモリを返しようと努力します。
最新JVMはプログラムを作成したプログラマよりもオブジェクトをよく扱うため
人為的に終了メソッドを呼び出すことは避けた方が良いです。
最新JVMはプログラムを作成したプログラマよりもオブジェクトをよく扱うため
人為的に終了メソッドを呼び出すことは避けた方が良いです。
もし、ファイルやスレッドのような明示的に返すか、
削除する必要がリソースを含むオブジェクトのクラスを扱る場合は、
明示的な終了メソッドを使用できます。
見やすい例にoutputStreamやInputStreamがあります。
これらのメソッドはリソースを管理するため、
見やすい例にoutputStreamやInputStreamがあります。
これらのメソッドはリソースを管理するため、
try catch finallyと使用するようになります。
この時closeメソッドを使用して終了することによってメモリーを返すことができます。
Foo foo = new Foo(...);
try{
...
} finally {
foo.terminate();
// or foo.close();
}
댓글 없음:
댓글 쓰기