gc電路是什么?
答案是
Garbage Collection簡稱為GC,是垃圾回收的意思、內(nèi)存處理器是編程人員容易出現(xiàn)問題的地方,忘記或者錯誤的內(nèi)存回收會導致程序或系統(tǒng)的不穩(wěn)定甚至崩潰。
Java語言提供的GC功能可以自動的檢測對象是否超過作用域,從而達到自動回收內(nèi)存的目的,Java語言沒有提供釋放已分配內(nèi)存的顯示操作方法,資源回收工作全部交由GC來完成,程序員不能精確的控制垃圾回收的時機。
GC在實現(xiàn)垃圾回收時的基本原理:
Java的內(nèi)存管理實際就是對象的管理,其中包括對像的分配和釋放。對于程序員來說,分配對象使用new關(guān)鍵字,釋放對象時只是將對象賦值為null,讓程序員不能夠再訪問到這個對象,該對象被稱為“不可達”。GC將負責回收所有“不可達”對象的內(nèi)存空間。
對于GC來說,當程序員創(chuàng)建對象時,GC就開始監(jiān)控這個對象地址、大小以及使用情況。通常GC采用有向圖的方式記錄并管理堆中的所有對象,通過這種方式確定哪些對象是“可達”的,哪些對象是“不可達”的。當GC確定一些對象為“不可達時”GC就有責任回收這些內(nèi)存空間,但為了GC能夠在不同的平臺上實現(xiàn),java規(guī)范對GC的很多行為都沒有進行嚴格的規(guī)定。例如對于采用什么類型的回收算法、什么時候進行回收等重要問題都沒有明確的規(guī)定,因此不同的JVM實現(xiàn)著不同的的實現(xiàn)算法,這也給JAVA程序員的開發(fā)帶來了很多不確定性。
根據(jù)GC的工作原理,可以通過一些技巧和方式讓GC運行更快,高效而又合理。編程建議如下:
1、盡早釋放無用對象的引用,特別注意一些復雜對象,如數(shù)組,隊列等。對于此類對象,GC回收它們的效率一般較低,如果程序允許,應(yīng)盡早將不用的引用對象賦為null,這樣可以加速GC的工作。
2、盡量少用finalize函數(shù)。finalize是java提供給程序員用來釋放對象或資源的函數(shù),但是它會加大GC的工作量,因此盡量少采用finalize函數(shù)回收資源。
當程序有一定的等待時間,程序員可以手動執(zhí)行System.gc(),通知GC運行,但是java語言規(guī)范并不保證GC一定會執(zhí)行。
finalize是什么?
finalize是方法名,java技術(shù)允許使用finalize()方法在垃圾收集器從內(nèi)存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象的調(diào)用的。它是在Object類定義的,因此所有的類都繼承了它。子類覆蓋finalize()方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize()方法是在垃圾收集器刪除對象之前對這個對象的調(diào)用的。