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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,在下面的程序中,为什么finalize()里面的代码没有被执行啊?

public class Systemgc{
        public Systemgc(){  
                System.gc();
        }
        public void finalize(){
                System.out.println("after System.gc() is called");
        }        
         
        public static void main(String [] args){
               
                Systemgc d=new Systemgc();
        }
}

2 个回复

倒序浏览
Systemgc d=new Systemgc();
在内存中创建了一个Systemgc的对象。
执行System.gc(); 时,这个d不为null,即内存中还有对该Systemgc对象的引用,那么JVM就不会认为这个对象是垃圾,也就不可能回收它。如果把d置为null,过一会JVM发现已经没有这个对象的引用了,就会自动回收,至于这个一会是多一会,那就说不好了,至少我是说不好的
回复 使用道具 举报
  1. public class Main{
  2.         String s;
  3.         Main(String s){
  4.                 this.s = s;
  5.         }
  6.         public static void main(String[] args) {
  7.                 Main m1 = new Main("one");//这里创建的对象,有一个引用指向该对象,
  8.                 new Main("two");//创建一个匿名对象,没有引用指向该对象。
  9.                 System.gc();//强制进行垃圾回收工作,检查内存中没有引用的对象
  10.         }
  11.         @Override
  12.         protected void finalize() throws Throwable {
  13.                 super.finalize();
  14.                 System.out.println(s);
  15.         }
  16. }
  17. //输出:two
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马