1

javaはガベージ署名されたものをオブジェクトとして収集しますか?

はいの場合、プログラムでハッシュテーブルの1つにそれらを送信するようにJavaに指示できますか(オブジェクトを受け入れますか?)。

この機能に興味があります。コマンドは知って System.gc()いますが、どうすれば最初の質問を達成できますか? できますか?

 myTrashBin=System.gc().getObjectList(); //???

そうでない場合は、カスタム クラスによってこの機能を作成する方法があるかもしれません。

最後の質問: System.gc() をオーバーライドするにはどうすればよいですか?

ありがとう。

4

4 に答える 4

5

これはあなたの管理下にありません。オブジェクトに到達できない場合、GC はこれらを収集します。System.gc()ヒントに過ぎず、あてにできません。

finalize()興味深いかもしれませんが、この質問への回答を読んで、制限などを理解してください。PhantomReferencesも興味深いかもしれません。

于 2012-09-13T15:01:18.637 に答える
1

Java はマネージ メモリを使用します。これは、あなたがしたくないのでJVMがそれを管理することを意味します;)

プログラムでハッシュテーブルの1つにそれらを送信するようにJavaに指示できますか(オブジェクトを受け入れますか?)

WeakReference を介して参照されている場合にクリーンアップされるすべてのオブジェクトをプログラムで取得できます。

System.gc() をオーバーライドするにはどうすればよいですか?

できません。実際には、何かを行うことが保証されていないため、ヒントにすぎません。

于 2012-09-13T15:08:46.867 に答える
1

Finalizeメソッドを実装してそこにコードを記述すれば、そのようなことを達成できると思います: オブジェクトをカスタムリストに追加するかもしれません

オブジェクトへの参照がなくなったとガベージ コレクションが判断したときに、オブジェクトのガベージ コレクタによって呼び出されます。

http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#finalize%28%29

于 2012-09-13T15:02:42.053 に答える
1

System.gc()ガベージコレクタの呼び出しを発行しますが、それだけです。ドキュメントが言うように、優先度上がり、アイテムをより早く収集する可能性がありますが、保証はありません。

gc メソッドを呼び出すということは、Java 仮想マシンが未使用のオブジェクトをリサイクルして、現在占有しているメモリをすばやく再利用できるようにすることを示唆しています。メソッド呼び出しから制御が戻ると、Java 仮想マシンは破棄されたすべてのオブジェクトからスペースを再利用するために最善を尽くしています。

メソッドやオブジェクトの参照カウンターの管理など、他のアプローチを採用した方がよいfinalize()ため、ゼロに達したときに収集するのが適切であることがわかります。このリンクをチェックしてください。

于 2012-09-13T15:04:51.257 に答える