2

この場合はどうなりますか?まだツリーへの参照がありますが、収集されますか?

class BinarySearchTree {
    TreeNode root;
    /* constructor  including assigning the root*/
    /* other methods of the tree */
    public void example() {
        root = null; /* assume the root already has children */
                         /* we haven't set the parent of the child of the root*/
                          /*to null*/
    }
}

class TreeNode {
    private TreeNode left;
    private TreeNode right;
    private TreeNode parent;

    /* set and get methods */
}
4

4 に答える 4

4

ガベージ コレクタは「ルート」から開始します。これらは、JVM によって固定されたいくつかのテーブルと、すべてのスレッドのすべてのスタック フレーム内のすべての参照になります。各「ルート」参照は、それがアドレス指定するオブジェクトまで「追跡」され、そのオブジェクトは、到達可能だが追跡されていないオブジェクトのリストに追加されます。

ルートがトレースされた後、到達可能であるがトレースされていないオブジェクトのリストが一度に 1 つずつ調べられ、それらのオブジェクトの参照が他のオブジェクトに「トレース」され、それらがリストに追加されます。

追跡が完了すると、オブジェクトはリストから削除されます。参照をたどっているときに到達し、すでに触れられていることが判明したオブジェクトは、リストに追加されません。

最終的に、到達可能だが追跡されていないオブジェクトのリストが空になり、その時点で「マーク」フェーズが完了します。次に、「スイープ」フェーズが始まります。すべてのオブジェクトがスキャンされ、到達していないオブジェクトはすべて破棄されます。

もちろん、これは GC を単純化しすぎたバージョンですが、ほぼすべてをカバーしています。上記のように「到達」できないオブジェクトは「収集」され、その領域は空き領域プールに戻されます。

于 2013-01-22T01:41:14.820 に答える
3

ガベージ コレクターは、到達できないオブジェクトを収集します。IOW、それを指すものは何もありません。それ自体が指すものは関係ありません。

于 2013-01-22T01:28:27.900 に答える
1

ガベージコレクターはそれへの参照がないオブジェクトをすべて収集して削除されます、それはあなたがそれにまったく到達できないことを意味します

于 2013-01-22T01:28:57.597 に答える
0

ツリーに実際にどのように値を設定しているかを確認しなくても、答えは「場合による」ということになります。原則として、将来変数にアクセスできなくなった場合、それはオブジェクトと呼ばれ、gc が処理します。ただし、後で子ノードを参照できるようにツリーが設定されている場合 (実際の変数名がある場合など)、gc は役に立ちません。

于 2013-01-22T01:29:40.990 に答える