java中finalize()方法

finalize
垃圾回收机器(Garbage Collection),也叫GC,垃圾回收器主要有一下特点:

1、当对象不再被程序所使用的时候,垃圾回收器将会将其回收
2、垃圾回收是在后台运行的,我们无法命令垃圾回收器马上回收资源,但是我们可以告诉他可以尽快回收资源(System.gc()和Runtime.getRuntime().gc())
3、垃圾回收器在回收某个对象的时候,首先会调用该对象的finalize()方法
4、GC主要针对堆内存

finalize()是Object里面的一个方法,当一个堆空间中的对象没有被栈空间变量指向的时候,这个对象会等待被java回收:jdk里面是这样实现的:

protected void finalize() throws Throwable { }
}

源码中显示的@Deprecated(since="9")的意思就是说在jdk9以后这个方法就过时了(有其他的方法代替),但还是可以试验下…

 1 public class testFinalize
 2 {
 3     public static void main(String[] args){
 4     
 5         Person p = new Person();
 6         p = null;//此时堆当中的Person对象就没有变量指向了,就变成了垃圾,等到垃圾回收机制调用的finalize()的时候会输出
 7         //那句话
 8     }
 9 }
10 
11 class Person
12 {
13 
14     protected void finalize() throws Throwable{
15         
16         System.out.println("我快死了!!!");
17     }
18 
19 }

测试了几次,垃圾回收机制都没有启动(这点垃圾她真的看不上)。咱们程序员也不能强制垃圾回收器启动,但是可以适当建议她启动,毕竟人家傲娇得很呢嘛,下面这代码建议她启动(增加垃圾回收器启动的概率)。

 1 public class testFinalize
 2 {
 3     public static void main(String[] args){
 4     
 5         Person p = new Person();
 6         p = null;
 7         System.gc();
 8 
 9 
10     }
11 }
12 
13 class Person
14 {
15 
16     protected void finalize() throws Throwable{
17         
18         System.out.println("我快死了!!!");
19     }
20 
21 }

你看看,你看看,人家还是不理你,看来得拿出点正当的手段了(就好比追女孩子一样,追不到,可以采取一些正当的手段,比如买束花什么的,会加分的吧…咱程序员也懂浪漫~)。改为如下代码:

 1 public class testFinalize
 2 {
 3     public static void main(String[] args){
 4     
 5         Person p = new Person();
 6         //送点花
 7         for(int i = 0 ; i< 1000; i++){
 8            p = null;    
 9         }        
10         System.gc();//增加垃圾回收器启动的概率
11     }
12 }
13 
14 class Person
15 {
16 
17     protected void finalize() throws Throwable{
18         
19         System.out.println("我快死了!!!");
20     }
21 
22 }

现在就出来了…如果没出来可以把循环增加一下~

看来还是使点手段好用啊!

参考链接:https://blog.csdn.net/qq_37823003/article/details/107333386

原文地址:https://www.cnblogs.com/woaiheniunai/p/15456433.html