2

Java について非常に基本的な質問があります。これをどこでも検索しましたが、どこにも解決策が見つかりませんでした。

二分木の削除について読み込もうとしています。DFS や BFS などについて詳しく説明する前に、ツリーのルートへのアクティブな参照をすべて解放すれば、ツリー全体が自動的に GC されるはずだと考えていました。つまり、ルートへの唯一のアクティブな参照を削除した場合、ルートは GC される必要があるため、ルートの子へのアクティブな参照はもう存在せず、GC される必要があります。これは、ツリー全体が GC されるまで、連鎖反応として継続する必要があります。私の分析は正しいですか、それとも何か問題がありますか?

前提: すべてのノードは、その親によってのみ参照され、他には誰も参照されません。

4

1 に答える 1

3

一般的な意味では、あなたは正しいです。それ起こる可能性があります。

ただし、ある意味では、ほとんどのガベージ コレクターはそのようには機能しません。ツリーのルートへの最後のリンクを削除しても、GC はすぐには起動しません。むしろ、実行に適した (効率的な) 時間になるまで待機します。次に、まだ到達可能な (つまりガベージではない) すべてのオブジェクトをトレースし、それらを処理して、残りを再利用します。(実際、最高のガベージ コレクターにとって、「残りを回収する」プロセスは非常に安価です。)

これに対する例外は、参照カウント (いわゆる) ガベージ コレクターです。最後の参照を削除すると、削除の即時カスケードが実際にトリガーされる可能性があります。しかし、主流のガベージ コレクション言語では参照カウントは使用されません。これは、処理が遅く、サイクルを使用してデータ構造を再利用できないためです。確かに、ガベージ コレクションに参照カウントを使用している Java 実装はこれまで見たことがありません。

于 2012-09-20T03:28:39.863 に答える