黑马程序员技术交流社区

标题: 垃圾回收的小知识问题? [打印本页]

作者: 想飞的鱼    时间: 2014-5-14 17:00
标题: 垃圾回收的小知识问题?
  1. class A
  2. {
  3.         private static int count = 0;//定义一个静态变量记录堆内存中有效对象的个数

  4.         public A()
  5.         {
  6.                 count++;//每用new新建一个对象时调用构造方法,count加1
  7.         }
  8.         public void finalize()//Object类中的一个方法,当对象在堆内存中变成垃圾释放前调用
  9.         {
  10.                 count--;
  11.         }
  12.         static int getCount()//定义一个静态方法,用于返回count
  13.         {
  14.                 return count;
  15.         }
  16. }
  17. public class TestA
  18. {
  19.         public static void main(String[] args)
  20.         {
  21.                 A a1 = new A();
  22.                 a1 = null;//将a1对象变成垃圾
  23.                 A a2 = new A();
  24.                 A a3 = new A();
  25.                 System.gc();//强制启动垃圾回收器,调用finalize()方法

  26.                 int count = A.getCount();
  27.                 System.out.println("现在堆内存里有 "+count+" 个有效对象");
  28.         }
  29. }
复制代码


如上代码,按我的预想应该输出结果是 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