Java における Scavenge GC と Full GC の違い
Scavenge GC と Full GC の処理の違いは何か教えて下さい。以下については理解しています。
- Scavenge GC が Eden 領域がいっぱいになった時に実行される
- MaxTenuringThreshold の回数文、S0 から S1 に移動が発生した場合に、OLD 領域への移動が発生する
- Old がいっぱいになった時に Full GC が発生する。
つまり、Old に残っているオブジェクトは、どこからか参照されていて、それ故に残っていると考えられます。したがって、Full GC が Scavenge GC と同様の処理である場合、Old のオブジェクトは、どこからか参照されていると判定されるので、破棄できないのではないかと思いました。
しかし、実際にはそんなはずは無いので、Full GC と Scavenge GC には、不要なオブジェクトを探索するアルゴリズムに差異があるのでは(Full GC のほうが深く探索するなど)、と推測しているのですが裏付けとなる情報が得られていません。
よろしくお願いします。