朋友们 我学习java的时间还不长,能不能告诉我垃圾回收是怎么样具体实施的啊
  谢谢大家啊
package ThinkingInJava;class Chair
{
static boolean gcrun=false;
static boolean f=false;
static int created=0;
static int finalized=0;
int i;
Chair()
{
i=++created;
if(created==47)
{
System.out.println("Created 47");
}
}
protected void finalize()
{
if(!gcrun)
{
gcrun=true;
System.out.println("Begining to finalize after"+created+"Chair have been created");
}
if(i==47)
{
System.out.println("Finalizing Chair #47,"+"Setting flag to stop Chair creation");
f=true;
}
finalized++;
if(finalized>=created)
{
System.out.println("All"+finalized+"finalized");
}
}

}
public class Garbage {
public static void main(String[] args)
{
if(args.length==0)
{
System.err.println("Usage:\n"+"java Garbage after");
return;
}
while(!Chair.f)
{
new Chair();
new String("To take up space");
}
System.out.println("After all Chairs have been created:\n"+"total created+"+Chair.created+", total finalized="+Chair.finalized);
if(args[0].equals("before"))
{
System.out.println("gc():");
System.gc();
System.out.println("runFinalization():");
System.runFinalization();
}
System.out.println("bye!");
if(args[0].equals("after"))
{
System.runFinalizersOnExit(true);
}
}
}

解决方案 »

  1.   

    jvm觉得什么时候该收集的时候就收集..你调用不一定收集.
      

  2.   

    既然都是垃圾了 就不要太关心它了处理机制还是比较底层的东西 我不会 但我想一句话也说不清楚  楼主现在没必要关心这个 等以后有时间看看jvm的规范 没准里面有介绍  
      

  3.   

    不知道用System.gc()是不是会立刻垃圾回收,但显式使用它以后一定会调用finallize()否则就要内存使用到一定程度以后才会自动调用finallize()  (相当于调用了system.gc??)
    不知道这个时候是不是垃圾回收的时刻
      

  4.   


    我想应该是system.gc以后就直接开始垃圾回收了吧,这个"不一定收集"应该是回收需要时间,不一定能及时就回收掉的意思吧
      

  5.   

    System.gc();
    可以由用户指定调用垃圾回收函数一般情况下,当变量超出作用域时,JVM会自动调用GC
      

  6.   

    系统会主动回收或者处理那些new 的对象,也就是收回内存
      但是一些特殊的不通过new 的对象就收不回啊
        你们说我不需要对这个东西进一步了解吗
      这个有点复杂,呵呵
      

  7.   

    帮推建议楼主下次再提问要问一些更具体的问题,
    比如某段程序中,某某对象在什么时候回收之类的,
    像这个问题,个人感觉太宽泛了。
    需要解释的很多,不好着力。good luck