A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

4 个回复

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

finalize() 方法,不需要自己调用,只需要定义就行吗?
回复 使用道具 举报
系统是默认调用的。就像多线程Thread类的run方法,你使用 对象.start(); 方法后,系统默认调用你重写的run()方法。
回复 使用道具 举报
孜孜不倦 发表于 2015-12-30 21:27
finalize() 方法,不需要自己调用,只需要定义就行吗?

不需定义, 这是个Object类中的方法, 每个类都继承了下来
你根本不用管垃圾回收, 知道有这个事就行了
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马