当前位置: 技术问答>java相关
刚接触JAVA,有个关于垃圾回收的问题不明白,请教大家!
来源: 互联网 发布时间:2017-03-28
本文导语: public class Test { static int total=10; static boolean gcrun=false; public static void main(String[] args) { while (!gcrun) { new Test(); } } public void finalize() { gcrun=true; System.out.println("Beginning to finalize."); } public Test() {...
public class Test
{
static int total=10;
static boolean gcrun=false;
public static void main(String[] args)
{
while (!gcrun)
{
new Test();
}
}
public void finalize()
{
gcrun=true;
System.out.println("Beginning to finalize.");
}
public Test()
{
System.out.println(this);
}
}
这个程序的结果最后为什么会显示两遍Beginning to finalize.
{
static int total=10;
static boolean gcrun=false;
public static void main(String[] args)
{
while (!gcrun)
{
new Test();
}
}
public void finalize()
{
gcrun=true;
System.out.println("Beginning to finalize.");
}
public Test()
{
System.out.println(this);
}
}
这个程序的结果最后为什么会显示两遍Beginning to finalize.
|
哈哈,因为你在循环中调用new Test();以后并不会立刻执行public void finalize(),所以嘛就建立了多个Test对象,当然也就有多个Beginning to finalize.输出了。
|
我的理解是这样的,你new了多少对象出来,就“有可能”有Beginning to finalize.输出,仅仅是有可能而已,和内存有关系的,假如你在你机器上,new 了一百个对象,在释放了两个以后,系统认为内存够用的,所以就不再收集了,因为他不能一下子给你收拾得很干净,因为它有其它事要干。
在我的机器上是显示四次的。
gcrun这个变量的作是说在开始回收垃圾后就停止再产生垃圾。
不知道我这样理解对不对,我也是初学的
在我的机器上是显示四次的。
gcrun这个变量的作是说在开始回收垃圾后就停止再产生垃圾。
不知道我这样理解对不对,我也是初学的