私は長い間Javaについての本を読んでいません。最近、James Goslingの<< Javaプログラミング言語>>を読んで、読書のメモを取りました。この部分は、ゴミリサイクルに関するものです。
1.ゴミリサイクル
オブジェクトは新規を使用して作成されますが、オブジェクトが占めるメモリをリサイクルする対応する削除操作はありません。オブジェクトの使用を完了するときは、そのオブジェクトへの参照を停止する必要があります。
- >参照を変更して別のオブジェクトをポイントします
- > NULLへの参照を指します
- >メソッドから戻って、メソッドのローカル変数が存在しなくなるように
キーポイント:
- >実行可能なコードからオブジェクトに到達できない場合、それが取るスペースをリサイクルできます。
- >ゴミリサイクルとは、ぶら下がっている参照を心配する必要がないことを意味します。虚偽の参照とは、削除されたメモリ空間への参照を指します。この問題は、プログラマーがオブジェクトが削除されたときに直接制御できるシステムに存在します。
- >ガベージコレクターモデル:参照カウンターメソッド(円形の参照を解くことはできません)、マークアンドスイープ。
2。概要
メソッドを完成させます
- >ガベージコレクターがオブジェクトが到達できないこと、およびオブジェクトのスペースがリサイクルされると判断した後、ガベージコレクターはこの方法を呼び出します。
- >このメソッドは、オブジェクトで使用されるすべての非メモリリソースをクリアでき、各オブジェクトに対して1回しか呼び出されません。このメソッドの実行により、オブジェクトに再び到達できるようになり、すぐに再到達できなくなった場合でも、この方法は1回しか呼び出されません。
- >ファイナライズメソッドは、特定の期間で呼び出すことができ、呼び出されることはありません(Java仮想マシンは終了します)。
オーバーライドファイナライズメソッド
- >オブジェクトがごみになると、それが言及する他のオブジェクトもゴミになる可能性があります。これらのゴミは、私たちが書いたファイナライズ方法を呼び出す前に終了した可能性があるため、予測不可能な状態にある可能性があります。
- >上書きファイナライズメソッドは、super.finalizeメソッドを追加することです。最終的な文に追加するのが最善です。スーパークラスで宣言されたコンテンツの一部を終了できることを確認してください。
iii。ガベージコレクターと対話するための関連クラスと方法
クラス:runtime.getRuntime()、system
方法:gc()、runfinalization()、freememory()、totalmemory()、maxmemory()
システムクラスは、静的Gc()およびrunfinalization()メソッドをサポートします。これは、現在のランタイムオブジェクトの対応するメソッドを呼び出します。
IV。アクセシビリティ状態および参照オブジェクト
オブジェクトは、参照が指定されていない場合にのみガベージを収集することができますが、オブジェクトを指す選択された参照がまだある場合、オブジェクトをガベージとして収集することをお勧めします。
参照オブジェクトの唯一の目的は、参照と呼ばれる別のオブジェクトへの参照を維持することです。通常、フィールドまたはローカル変数を介してオブジェクトへの参照を維持しますが、実際に必要なオブジェクトをラップする参照オブジェクトへの直接参照を維持できます。ゴミコレクターは、オブジェクトへの残差参照が参照オブジェクトフェイスを介してオブジェクトを参照されるかどうかを判断する場合があるため、オブジェクトをリサイクルするかどうかを決定できます。参照オブジェクトの強度は、ガベージコレクターの動作を決定し、通常の参照が最も強力な参照です。
参照クラス
- >パッケージ:java.lang.ref
- >典型的な方法:get()、clear()、enqueue()、isenqueued()
引用とアクセシビリティの強度
- >オブジェクトは強く到達可能です:通常の参照
- >オブジェクトは柔らかく到達可能です:softreference
- >オブジェクトは弱く到達可能です:weakReference
- >オブジェクトは実質的にアクセス可能です(Phantom Reachable):Phantomreference
- >オブジェクトは到達不可能です:オブジェクトが弱くアクセス可能になる(または列弱い)後に参照リンクなし、終了することができます。オブジェクトが終了後に到達できない場合、リサイクルできます。
オブジェクトの到達可能性フェーズは、ガベージコレクターをトリガーして、関連する参照オブジェクトタイプで適切な動作を実行します。
- >ソフトリーチ可能なオブジェクトは、ゴミコレクターによってリサイクルされる場合があります。私たちが確信できるのは、outofmemoryerrorエラーを投げる前に、ソフトラファレーションオブジェクトのすべてのソフトラフェフェルがクリアされることです。
- >適切にアクセス可能なオブジェクトは、ゴミコレクターによってリサイクルされます。
- > Virtual Reachableオブジェクトは、その参照オブジェクトにPhantomreferenceを介してアクセスできず、GETメソッドは常にnullを返すため、真に到達できません。しかし、仮想参照の存在は、仮想参照を明示的にクリアする前にオブジェクトがリサイクルされるのを防ぐことができます。仮想参照により、ファイナライズメソッドが呼び出されたオブジェクトを処理することができ、それらが「死んでいる」と考えることが安全になります。