朋友们 我学习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);
}
}
}
谢谢大家啊
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);
}
}
}
不知道这个时候是不是垃圾回收的时刻
我想应该是system.gc以后就直接开始垃圾回收了吧,这个"不一定收集"应该是回收需要时间,不一定能及时就回收掉的意思吧
可以由用户指定调用垃圾回收函数一般情况下,当变量超出作用域时,JVM会自动调用GC
但是一些特殊的不通过new 的对象就收不回啊
你们说我不需要对这个东西进一步了解吗
这个有点复杂,呵呵
比如某段程序中,某某对象在什么时候回收之类的,
像这个问题,个人感觉太宽泛了。
需要解释的很多,不好着力。good luck