黑马程序员技术交流社区

标题: 方法 System.gc( ) 应该怎样正确使用? [打印本页]

作者: 孜孜不倦    时间: 2015-12-30 18:23
标题: 方法 System.gc( ) 应该怎样正确使用?
class Demo8 {
        public static void main(String[] args) {
                Person p1 = new Person();
                Person p2 = new Person();
                p1 = null;
                p2 = null;
                System.gc();
                for (int i = 0;i <2000000000 ;i++ ) {
                }
        }
}
class Person {
        public void finalize(){
                System.out.println("对象被作为垃圾回收");
        }
}
这里的 方法 finalize() 在主函数中没有被调用,为什么能够输出如下结果呢,求大神指点一二.




2015-12-30_181846.png (47.61 KB, 下载次数: 57)

2015-12-30_181846.png

作者: 隔壁老猫    时间: 2015-12-30 21:11
一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。
作者: 孜孜不倦    时间: 2015-12-30 21:27
隔壁老猫 发表于 2015-12-30 21:11
一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生 ...

finalize() 方法,不需要自己调用,只需要定义就行吗?

作者: Steve_小海    时间: 2015-12-30 21:49
系统是默认调用的。就像多线程Thread类的run方法,你使用 对象.start(); 方法后,系统默认调用你重写的run()方法。
作者: 隔壁老猫    时间: 2015-12-30 22:07
孜孜不倦 发表于 2015-12-30 21:27
finalize() 方法,不需要自己调用,只需要定义就行吗?

不需定义, 这是个Object类中的方法, 每个类都继承了下来
你根本不用管垃圾回收, 知道有这个事就行了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2