垃圾分類機制造成

對於任何語言,都會在運行期間建立許多對象,而且須要爲這些對象分配內存地址。當這些對象不須要使用時,須要釋放它們所佔用的內存地址,以便新對象使用。對象內存釋放的這個機制稱爲垃圾收集機制(GC)。
Java中的垃圾回收是自動化的,但其可控性較差,垃圾分類內存溢出很容易。內存溢出是由JVM內存分配的對象太多形成的,這些對象須要比JVM內存大小更多的內存。雖然它在Java中是自動的。可是程序員仍然能夠調用系統。GC()用於手動恢復。調用此方法將嘗試釋放被丟棄對象佔用的內存,但結果不必定,所以附加了免責聲明。接下來,咱們將分析如何肯定要回收的對象、什麼時候回收以及如何回收。程序員

肯定回收目標:算法

恢復對象的肯定有兩種算法:引文計數法和可訪問性分析法。[引用計數]系統向對象添加計數器,有新引用時添加1,引用失敗時減去1。但這種方法不能解決兩個物體的圓參考問題。[可訪問性分析]爲了肯定一個對象是否須要被引用鏈回收,將一系列GC根對象用做從這些根節點向下搜索的起點。搜索路徑稱爲參考鏈。當一個對象和GC根之間沒有連接時,它證實該對象不可用,須要進行搜索。回收此對象。對象


回收時間:內存

當CPU空閒、堆已滿並調用系統時,它將回收。GC()回收。get

回收方法:自動化

[標籤清除算法]首先標記須要回收的對象,而後再回收。缺點:恢復速度慢,回收後內存碎片大量離散,大對象須要在之後運行過程當中分配,找不到足夠的連續內存,形成內存空間浪費。垃圾回收


[複製算法]搜索

相關文章
相關標籤/搜索