黑马程序员技术交流社区
标题:
垃圾回收的小知识问题?
[打印本页]
作者:
想飞的鱼
时间:
2014-5-14 17:00
标题:
垃圾回收的小知识问题?
class A
{
private static int count = 0;//定义一个静态变量记录堆内存中有效对象的个数
public A()
{
count++;//每用new新建一个对象时调用构造方法,count加1
}
public void finalize()//Object类中的一个方法,当对象在堆内存中变成垃圾释放前调用
{
count--;
}
static int getCount()//定义一个静态方法,用于返回count
{
return count;
}
}
public class TestA
{
public static void main(String[] args)
{
A a1 = new A();
a1 = null;//将a1对象变成垃圾
A a2 = new A();
A a3 = new A();
System.gc();//强制启动垃圾回收器,调用finalize()方法
int count = A.getCount();
System.out.println("现在堆内存里有 "+count+" 个有效对象");
}
}
复制代码
如上代码,按我的预想应该输出结果是 2 ,为什么还是 3 呢?
求指教~
作者:
小周务商
时间:
2014-5-14 20:43
启动垃圾回收机制。它不一定马上回收的。只是告诉垃圾回收机制去回去吧。
但是它什么时候回收是不确定的。
作者:
想飞的鱼
时间:
2014-5-14 21:10
本帖最后由 想飞的鱼 于 2014-5-14 21:16 编辑
小周务商 发表于 2014-5-14 20:43
启动垃圾回收机制。它不一定马上回收的。只是告诉垃圾回收机制去回去吧。
但是它什么时候回收是不确定的。 ...
我看张孝祥老师<Java就业培训教程>System.gc()这个方法是强制启动垃圾回收器,然后调用finalize()方法,如果启动之后回收不确定的话和它自己启动回收有什么区别呢?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2