-1

我已经引用了这个链接。堆内存

我有个疑问

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

如果 GC 发生,首先dt将在eden 空间,如果 GC在Survivor 空间发生,它将进入Survivor空间(如果我错了,请纠正我)。dt

我的问题是:

  1. 如果显示日期并且程序完成运行过程,那么这些 dt 会保留在堆空间中吗?
  2. 如果 GC 没有发生, dt还会在哪里?
    (伊甸园空间,幸存者空间等)
  3. 程序完成运行过程,然后 dt 将没有参考,对吗?

非常感谢你 .....

4

1 回答 1

1

如果显示日期(程序完成运行过程)这些 dt 是否会保留在堆空间中?

(1) 当程序完成时,堆上将没有任何东西(dt 将不存在)

如果 GC 没有发生,dt 将保留在哪里?(伊甸园空间,幸存者空间等)

(2) 关于“dt”,你只能说它会在伊甸园空间中创建,之后如果它进入幸存者空间或永久代或被垃圾收集,都是由 GC 管理的,你无法确切知道它在哪里

程序完成运行过程 dt 将没有参考,对吗?

(3) 是的,它不会有任何参考。事实上,当方法终止时 dt 将有资格进行 GC(现在如果 gc 发生在 rt 之外或需要时间你不知道)

需要明确的是,GC 没有任何保证,在程序执行期间分配的任何内存可能在程序终止后仍然分配,在这种情况下它将被操作系统回收

于 2012-07-31T04:26:32.670 回答