对象与垃圾回收

       java中的对象有三种状态,1:激活,2:去活,3:死亡。当一个对象有一个或者多个对象引用时,他处于激活状态。当一个对象没有引用指向他时,他将变成去活状态。当一个对象处于去活状态时,系统垃圾回收器准备回收该对象时,会先调用该对象的finalize方法,如果finalize方法中,该对象没有被重新引用,那么他将变成死亡状态,如果有其他引用,他重新变成激活状态。死亡状态:当对象没有被其他对象引用,且已经调用过了finalize方法(也没有让其变为激活状态),那么系统才真正的回收其内存资源。

     java中的对象没有必要由程序员手动删除,由垃圾回收器回收,可是垃圾回收器回收的时间往往具有不确定性。因此我们可以通过system.gc()方法或者Runtime.getRuntime().gc(),提醒垃圾回收器该回收垃圾了,记住只是提醒而已,至于垃圾回收器什么时候回收还是不确定的,只不过他会尽量快的进行回收。

    下面的代码演示了finalize方法中如何激活本身,和知道垃圾回收的不确定性。

    

public class Test1 {
	
   private static Test1 a = null ;
   void info()
   {
	   System.out.println("测试finalize()方法");
   }
   
   @Override
    protected void finalize() throws Throwable {
	    //使this对象重新变成激活状态
	     a=this;
    }

    public static void main(String[] args) throws InterruptedException {
	   new Test1();
	   //告诉垃圾回收器该收垃圾了
	   System.gc();
	   //没有这句的话,系统没有没有清理垃圾,那么就不会调用finalize方法,a对象为null,告诉我们并不是调用System.gc();
	   //后,垃圾回收器就马上开始回收垃圾了
	   Thread.sleep(2000);
	   //调用静态成员的info方法
	   a.info();
   }
}
     我们也可以强制垃圾回收器执行去活对象的finalize方法,通过调用system.runFinalization()方法,下面的代码和上面的代码一样,只不过不用线程休眠2s,垃圾回收器也会调用去活对象的finalizde方法。

   

public class Test1 {
	
   private static Test1 a = null ;
   void info()
   {
	   System.out.println("测试finalize()方法");
   }
   
   @Override
    protected void finalize() throws Throwable {
	    //使this对象重新变成激活状态
	     a=this;
    }

    public static void main(String[] args) throws InterruptedException {
	   new Test1();
	   //告诉垃圾回收器该收垃圾了
	   System.gc();
	   //没有这句的话,系统没有没有清理垃圾,那么就不会调用finalize方法,a对象为null,告诉我们并不是调用System.gc();
	   //后,垃圾回收器就马上开始回收垃圾了
	  // Thread.sleep(2000);
        
	    //垃圾回收器强制回收回收垃圾
	    System.runFinalization();
	   //调用静态成员的info方法
	   a.info();
   }
}
    

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值