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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM