2

若い世代のオブジェクトへの参照を必要とする古い世代のオブジェクトがあるとします。Now when a GC is executed for the young generation, what will happen to that object which is referenced by the object in old generation? Will it continue to be in young generation or moved to young generation or GCed?

また、マイナーGCの対象を決めたカードテーブルもあります。How does it work in the above context?

4

3 に答える 3

1

世代別ガベージ コレクションを参照してください: 「さらに、ランタイム システムは、参照の作成と上書きを観察することで、いつ参照が世代をまたぐかについての知識を維持します。ガベージ コレクターが実行されると、この知識を使用して、最初の白のいくつかのオブジェクトを証明できる場合があります。参照ツリー全体をトラバースしなくても、セットに到達できません。世代仮説が成り立つ場合、これにより、ほとんどの到達不能オブジェクトを再利用しながら、収集サイクルが大幅に短縮されます。」

あなたの質問に答えるために、それは生き続け、いつものように宇宙から宇宙へと昇格します。

于 2013-07-27T06:51:34.747 に答える
0

各オブジェクトについて、GC は通過した GC サイクルの数を追跡します。オブジェクトを別のプールに「昇格」させる決定は、オブジェクトごとの決定です。ルート化された (循環依存ではない) オブジェクトへのライブ参照がある場合、オブジェクトはガベージ コレクションされません。この決定は、特定のプールのオブジェクトが収集のために評価された後に行われます (GC はそのプールで実行されます)。つまり、そのオブジェクトにライブ参照がある場合、そのオブジェクトは収集されません。ライブ参照のないオブジェクトは、どのプールに存在するかに関係なく収集されます。プールは実際には GC の最適化の問題です。GC を可能な限り高速にするために、古いプールのオブジェクト (Survivor、Permgen など) は評価されません。若い世代のオブジェクトとして頻繁に。

于 2013-07-27T06:45:41.217 に答える
0

GC が世代間で機能する方法を誤解していると思います。若い世代または古い世代と言うとき、それらのいずれかに属するオブジェクトの主な基盤は、相互に参照するものではなく、それらの寿命に依存します。

それでは、あなたの質問に答えてくださいNo。初期化された時期に応じて、若いままになります(または古いものに移動する可能性があります)。Referencingオブジェクトが強力に到達可能かどうかを確認し、世代を決定しないために使用されます (Mark and Sweep の例)。

そして、それ自体、あなたの論理で考えると、古い世代のオブジェクトがそれらすべてを参照するという理由だけで、寿命が短くてもすべてのローカル変数またはオブジェクトを古い世代に直接配置する必要があります:)。幸いなことに、そうではありません。

于 2013-07-26T10:52:27.593 に答える