2011-06-24 12 views
2

Javaでオブジェクトを手動で削除するにはどうすればよいですか? obj.delete()またはobj.kill()Javaでのメモリ管理

+0

これらの議論を経る必要があります! JVMは気をつけます – gmhk

+3

あなたの答えははっきりしていますが、あなたが探していたものではないかもしれません。あなたが言及していない質問の背後に何かがありますか?なぜあなたはオブジェクトを削除する衝動を感じていますか?漏れに問題がありますか?詳しく教えてください。 –

+0

Javaのような管理された言語の全体的なポイントは、オブジェクトを削除する必要がないということです。実際にこれを制御する必要がある場合は、非常に特殊なニーズがあります。だから私はHeffernanに同意する...なぜあなたはこれを行う必要があるかについてもう少し詳しく説明する必要があります。 – dm76

答えて

10

の世話をします。 Javaには特別なガベージコレクタがあります。オブジェクトに参照がないと、そのオブジェクトはガベージコレクタによってピックアップされ、破棄されます。 Learning Java Tutorialsから

ガベージコレクタ

そのオブジェクトへのより多くの 参照が存在しない場合、オブジェクトがガベージコレクションの対象 です。変数に保持されている参照番号 は、変数が になると通常は削除され、 になります。または、 変数を特別な値 に設定することで、オブジェクト参照を明示的に にドロップすることができます。プログラムは同じ オブジェクトへの複数の参照を 持つことができます。オブジェクト へのすべての参照は、オブジェクトがガベージコレクションの対象となる前に削除する必要があります。

-1

のようなメソッドは、null値を代入するだけですか?

レッツGCには現実的な方法はありません。この

obj = null; 
+2

オブジェクトへの他の参照がある可能性がありますので、これは当てはまりません。 – Steve

+2

また、ほとんどの人は明示的なnullingに対してアドバイスしています。 – Mikaveli

+1

Javaのガベージコレクタはあまりにも原始的ではないため、参照カウントのみを扱うので、これは必要ではありません。 –

2

Javaが非常に普及している主な理由の1つは、ガベージコレクションです。メモリの割り当てや割り当ての解除について心配する必要はありません。つまり、オブジェクトを取り除きたい場合は、オブジェクトへのすべての参照をnullに設定し、ガベージコレクタが実行されるとオブジェクトは破棄されます。
ファイル、ソケット、データベース接続などのリソースを閉じることについて心配する必要があります。そのためには、try/finallyブロックで行う必要があります。

+0

"...いったんガベージコレクタがオブジェクトを実行すると、*は処分できます。" **すべての**対象オブジェクトが各コレクションで収集されることは保証されません。 –

3

オブジェクトを削除する方法はありません。 Javaのガベージコレクタは、オブジェクトに参照がなくなると自動的に実行します。

ただし、オブジェクトへの参照をすべて削除したら、System.gc()を呼び出してガベージコレクタを実行できます。メソッドのドキュメントを注意深く読んでください。削除のマークが付いたすべてのオブジェクトを削除するのに最善の努力を保証します。

また、私たちは手動で任意のオブジェクトを削除カント

+3

Gosh .. * System.gc()がガベージコレクタを 'コール'しないことについてのコメントの氾濫を待っています* –

+0

...誰かがSystem.gc()について言及しないことを望んでいました – Steve

+0

私の答えを編集しました。私にこれに関する包括的なリンクを投稿してください。私はこの答えを削除します。その1つは次のとおりです。http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/index.jsp?topic=/com.ibm.java.doc.diagnostics.60/diag/understanding/mm_gc_manual.html –