程序的问题!
//c04:Garbage.java
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");
}
public void finalize()
{
if(!gcrun)
{
gcrun = true;
System.out.println("Beginning to finalize after " + created + " chairs have been created");
}
if (i == 47)
{
System.out.println("Fanalizing 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)
{
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.length > 0)
{
if(args[0].equals("gc") || args[0].equals("all"))
{
System.out.println("gc():");
System.gc();
}
if(args[0].equals("finalize")||args[0].equals("all"))
{
System.out.println("runFinalization(): ");
System.runFinalization();
}
}
System.out.println("bye!");
}
}
问题:
1.调用finalize()是否是随机的?
2.为什么要用gcrun = true和f =true?
问题点数:20、回复次数:8Top
1 楼zhutouzip(醒了的鸟)回复于 2005-04-03 21:55:05 得分 0
1:finalize()的调用是随机的,当jvm判断内存不足时会调用这个方法!我们不知道jvm何时调用该方法!
2:标志位,用于判断何时进行垃圾回收了!Top
2 楼Sunny_pan(天奇)回复于 2005-04-03 22:02:40 得分 0
请问一下!标志位是怎么确定的?在那里可以找到有关这方面的文献.谢谢!!!!!!Top
3 楼zhutouzip(醒了的鸟)回复于 2005-04-03 22:12:51 得分 0
标志位是自己设定的,没有其它的资料!
Top
4 楼Sunny_pan(天奇)回复于 2005-04-03 22:39:48 得分 0
为什么我去掉gcrun = true;时候一直会运行 System.out.println("Beginning to finalize after " + created + " chairs have been created");Top
5 楼zhutouzip(醒了的鸟)回复于 2005-04-03 22:49:09 得分 0
gcrun = true;
你将它去掉的话,gcrun的值一直是false,当jvm调用finalize方法的时候,if语句一直成立,当然会不断输出那一行啊,finalize方法在何时调用不确定的,调用次数也不确定,并不是只调用一次!Top
6 楼Sunny_pan(天奇)回复于 2005-04-03 23:34:03 得分 0
但是gcrun = true;没有将值返回给if哪!也就是说if调用时并不会知道gcrun已经变成true啦.我程序中并没有将值return回去哪!@Top
7 楼zhutouzip(醒了的鸟)回复于 2005-04-03 23:37:03 得分 20
gcrun是Chair类的static成员,任何一个对象对它的修改都会造成它的值的改变,它相当于c中的全局变量啊,并不需要什么return的!
楼主以前是学c的吧?Top
8 楼Sunny_pan(天奇)回复于 2005-04-03 23:45:56 得分 0
了解!谢谢.我没有注意是用static的.谢谢Top




