【问题标题】:life cycle of object in javajava中对象的生命周期
【发布时间】:2012-07-28 18:47:29
【问题描述】:

我已经引用了这个链接。 Heap memory

我有疑问

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

第一个 dt 将在 eden 空间,如果 GC 发生,它将转到 Survivor 空间,如果 GC 在 dtSurvivor 空间时发生(如果有错误请纠正我)。

我的问题是:

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

非常感谢......

【问题讨论】:

  • 程序完成后,内存中已经不存在了,所以你的问题有点无意义...
  • @vanza 将在程序在没有 GC 的情况下完成时从堆内存中删除对象???
  • 当进程退出时,操作系统会回收为它们分配的所有内存。他们离开了;他们不存在了。这就是操作系统的工作方式。
  • @vanza 所以堆是对象临时存储的空间。程序退出后堆会释放???如果堆内存已满(在运行程序时)GC 删除类的非引用对象(当前正在运行)???没有以前运行的类的对象????

标签: java oop memory object heap-memory


【解决方案1】:

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

(1) 程序完成后堆上什么都没有(dt 不存在)

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

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

程序完成运行过程dt将没有引用对吗??

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

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

【讨论】:

  • 感谢 vivek .... 请也澄清这些......所以当程序完成运行过程时,任何类的对象都不会保留在堆中(在任何例外情况下)
  • @Amith 需要明确的是,GC 没有任何保证,在程序执行期间分配的任何内存都可能在程序终止后保持分配状态,在这种情况下,它将被操作系统回收。
  • @Amith 这是一篇关于教程的好文章etutorials.org/Misc/programmers+guide+java+certification/…Hopw,这将有助于澄清大部分疑问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
相关资源
最近更新 更多