ハッシュマップの中にいくつかのオブジェクトがあります。これらのオブジェクトにはバイトバッファが含まれています。今私はそれらのバイトバッファを解放したい。ですから、もし私がhashmapリファレンスをnullにすると、それらのオブジェクトはすべてガベージコレクタとバッファの解放が可能になります。またはそれらをすべて明示的にnullにする必要があります。オブジェクトをガベージコレクションする方法を教えてください。
答えて
プログラムのどこにも参照が残っていない場合、それらのオブジェクトはガベージコレクションの準備ができています。 これが発生する時間は、使用するガベージコレクタによって大きく異なります。
基本的には到達可能度になります。オブジェクトに、コード内にあるもの(aを持つa - > b - > c)から始まる参照(通常)の参照によって到達できない場合、GCに適格です。できれば、そうではありません。もう何もあなたのオブジェクトを参照していなければ、到達できないため、バイトバッファはGCに適格です。
ハッシュマップの中にいくつかのオブジェクトがあります。
私はそれらがキーではなく値であると仮定します。 (あなたがHashMap
からエントリを削除するか、単にnull
にキーの値を設定するかどうかの観点からこれだけの問題。)そのためにそう
私はちょうどそれがすべてのこれらのオブジェクトを可能にするハッシュマップの参照はnullを作る場合ガベージコレクションを準備し、バッファを解放する。またはそれらをすべて明示的にnullにする必要があります。
は、あなただけの、例えば、あなたのオブジェクトを解放する完全HashMap
からエントリを削除するか、あなたのオブジェクトへHashMap
の参照を解放するであろう、null
にエントリの値を設定する必要があります。それがあなたのオブジェクトに対する唯一の参照であれば、そのオブジェクトはGCに適格になります。あなたのオブジェクトがバイトバッファへの参照を持つ唯一のものなら、それはまたGCに適格になります。オブジェクトのバイトバッファへの参照を明示的に解放する必要はありません。
コードは、そう、1024ワード価値がある:他の場所
class Thingy {
private byte[] buffer;
MyObject() {
this.buffer = new byte[1024];
}
}
:
Map<String, Thingy> m = new HashMap<>();
m.put("foo", new Thingy());
// At this point, the HashMap refers to the Thingy, and the Thingy refers to the
// buffer, so neither of them is eligible for GC
m.remove("foo"); // or m.put("foo", null) if that's really appropriate
// At this point, nothing refers to the Thingy anymore, and so both the Thingy and
// its buffer are eligible for GC
Javaは、この規則の例外ですweak referencesの概念を持っています。たとえそのオブジェクトが含まれているWeakReference
からオブジェクトを取得することができたとしても(その時点ではそれはWeakReference
で到達できなくても)オブジェクトをGCさせることができます。
GCルーツの概念について言及する必要があります。グラフ内のパスを分析することは、出発点があれば意味をなさない – the8472
はい、他の参照がない限り(おそらく手動で)、ガベージコレクションされます。マップへの参照がある場合は、はい、ガベージコレクションされます。
私の考え:
私が呼び出す場合:MYMAP = NULL; マップ内の関連するハッシュマップキーまたは値オブジェクトで実際にはどうなりますか? これらのオブジェクトもガベージコレクションされますか、またはmyMapオブジェクト内のすべての関連オブジェクトをnullに設定する必要がありますか?
myMapには、いくつかの他のオブジェクトでまだ到達可能ないくつかのキーと値が保持されているとしましょう。 次に、
- すぐには何も起こりません。
- これらのキーと値にマップを介してしか到達できない場合は、到達不能になり、ガベージコレクションの対象となります。この場合、内部オブジェクトへの参照にnullを割り当てる必要はありません。
- しかし、内部ノードが他のパスを経由して到達可能であれば、それらはおそらく到達可能であるため、ガベージコレクションの対象にはなりません。また、マップをnullにすると、ガベージコレクションされません。
- 1. Jersey FormDataContentDispositionオブジェクトの作成方法を教えてください。
- 2. ポイントから消える方法を教えてください。
- 3. コールバックでオブジェクトをリリースする方法を教えてください。
- 4. いくつかのオブジェクトの追跡方法を教えてください
- 5. タブローを定義する方法を教えてください
- 6. ストリームフィルタをエコーする方法を教えてください。
- 7. ForeignKeyをモデル化する方法を教えてください。
- 8. Android - アイコンをタッチする方法を教えてください。
- 9. Eclipseプラグインをアンパックする方法を教えてください。
- 10. ImageViewCellをクリックする方法を教えてください。
- 11. Androidアプリをフリーズする方法を教えてください。
- 12. Edge.Funcを固定する方法を教えてください。
- 13. ImageView Androidをトリミングする方法を教えてください。
- 14. UIWindowをキーウィンドウにする方法を教えてください。
- 15. ジェンキンズを「ピップインストール」する方法を教えてください。
- 16. メソッドをオーバーライドする方法を教えてください。
- 17. モデルの関連オブジェクトにアクセスする方法を教えてください。
- 18. Matlabのクラス内でオブジェクトにアクセスする方法を教えてください。
- 19. これを解決する方法...教えてください
- 20. Mayaでメッシュスルーする方法を教えてください。
- 21. Apache Camelでループする方法を教えてください
- 22. Thread.terminateコマンドでクラッシュする方法を教えてください。
- 23. メソッドが複数のオブジェクトを返す方法を教えてください。
- 24. Artifactoryでバージョンを作る方法を教えてください
- 25. EclipseでAVDを「見る」方法を教えてください。
- 26. StdIn.isEmpty()をtrueに戻す方法を教えてください。
- 27. タッチスクリーンのボタンを押す方法を教えてください。
- 28. Swingアプリケーションに触れる方法を教えてください。
- 29. プルを待つ方法を教えてください。
- 30. メールをRailsで読む方法を教えてください
一般的にガベージコレクションのためにコードからオブジェクトを取得する方法はありません。したがって、要素全体を解放するためには、hashmap参照をnullにするだけで十分です。 –