-1

このリンクを参考にしました。ヒープメモリ

私は疑問を持っています

class Sample
{
    public static void main(String[] args)
    {
        Date dt=new Date();
        System.out.println(""+dt);
    }
}

GC が発生した場合、最初dteden スペースになります。サバイバー スペースにあるときに GC が発生した場合dtは、サバイバー スペースに移動します(間違っている場合は修正してください)。

私の質問は:

  1. 日付が表示され、プログラムが実行中のプロセスを完了すると、これらの dt はヒープ領域に残りますか??
  2. GCが発生しなかった場合、どこ dtに残りますか??
    (エデンスペース、サバイバースペースなど)
  3. プログラムが実行中のプロセスを完了すると、dt には参照がなくなりますよね??

どうもありがとうございました .....

4

1 に答える 1

1

日付が表示されている場合 (プログラムが実行中のプロセスを完了する)、これらの dt はヒープ領域に残りますか??

(1) プログラムが完了すると、ヒープには何もありません (dt は存在​​しません)。

dt が残る場所で GC が発生しない場合は?? (エデンスペース、サバイバースペースなど)

(2)「dt」について言えることは、eden空間に作成されるということだけです。その後、サバイバー空間またはTenured世代に移動するか、ガベージコレクションを取得すると、すべてGCによって管理され、どこにあるかを正確に知ることはできません

プログラムは実行中のプロセスを完了します dt には参照がありませんよね??

(3) はい、参照はありません。実際、メソッドが終了すると、dt は GC の対象となります (gc が rt 離れて発生したり、時間がかかる場合はわかりません)

明確にするために、GCには保証がありません。プログラムの実行中に割り当てられたメモリは、プログラムの終了後も割り当てられたままになる可能性があります。そのような場合、オペレーティングシステムによって再利用されます

于 2012-07-31T04:26:32.670 に答える