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