1.什么是垃圾回收機制?
程序在創建對象或者數組等引用類型實體的時候,系統會在堆內存上為之分配一段內存區,用來保存這些對象,當這些對象永久地失去引用后,就會變成垃圾,等待系統垃圾回收機制進行回收。
2.垃圾回收機制的特點:
- 垃圾回收機制只會回收堆內存中的對象,不會回收物理資源(網絡io)
- 垃圾回收機制是由系統控制的,程序是無法精准控制垃圾回收機制的時機的,程序只能指導對象什么時候不再被引用,當一個對象永久性地失去引用后,會由可達狀態變為可恢復狀態,程序會通知系統進行垃圾回收,但只是通知,最終是否回收是不確定的。
- 因為系統進行垃圾回收之前,會調用finalize()方法,這個 方法可能會使對象被重新引用,變為可達狀態,此時垃圾回收就會取消,
- 當系統調用了所有finalize()方法后,該對象仍然是可恢復狀態,也就是說此時的對象真正的失去了作用,這個時候該對象就會由可恢復狀態轉變位不可達狀態,最終會被系統作為垃圾回收掉該對象所占用的資源。
3.什么是finalize()方法?
finalize()方法時系統進行垃圾回收之前調用的方法。當系統要對某個不再被引用的對象所占用的資源進行回收時,會要求程序調用適當的方法來進行資源的清理,在java中提供了默認的機制來進行該資源的清理,也就是finalize()方法;finalize()方法時由系統的垃圾回收機制來調用的,這個方法的調用會使恢復狀態的對象重新被引用,所以它具有不確定性,最好不要人為的調用它來清理某個系統資源。
4.對象在垃圾回收機制中的狀態:
由三種狀態:可達性、可恢復性、不可達性。
- 當一個對象被創建后,只要有一個以上的引用變量引用它,這個狀態就處於可達狀態;
- 當一個對象失去了所有的引用之后,它就進入了可恢復狀態,這個狀態下,系統的垃圾回收機制會隨時調用finalize()方法對它占用的資源進行回收,此時只要由引用變量引用對該對象,這個對象又變成可達狀態,否則進入不可達狀態。
- 處於不可達狀態的對象,就會等待系統弄隨時對它所占的資源進行回收。