Java 垃圾回收機制
阿新 • • 發佈:2018-04-30
導致 垃圾回收 事件 相互 等於 理論 不同 基礎 其中
1.如何確定對象是個垃圾?
引用計數法:實現簡單、效率高,但是如何兩個對象同時等於null,他們會相互引用,導致他們的引用計數都不為0,永遠不會被回收。
可達性分析法:
2.典型的垃圾收集算法
標記-清楚算法:最基礎的垃圾回收算法,有標記階段和清除階段;標記階段的任務是標記處所有需要被回收的對象,清除階段的任務是回收被標記對象所占用的空間
缺點:容易產生內存碎片,碎片太多可能會導致後續過程中需要為大對象分配空間時無法找到足夠的空間而提前觸發新的一次垃圾收集動作
復制算法:將可用內存按容量劃分為大小相等的兩塊,每次只使用其中的一塊,當一塊的內存用完時,就將還存活著的對象復制到另一塊上,然後再把已使用的內存空間一次性清理掉,這樣就不容易出現內存碎片了。
缺點:能夠使用的內存縮減為原來的一半
標記-整理算法:標記階段和標記清除算法一樣,標記完後,將存活的對象都向一端移動,然後清理掉端邊界意外事件的內存。
分代收集算法:根據對象存活的生命周期將內存劃分為若幹不同的區域,將堆區劃分為老年代和新生代,老年代的特點是每次垃圾收集時只有少量對象需要被回收,而新生代的特點是每次垃圾回收時,都有大量的對象需要被回收;新生代采取復制算法,老年代使用標記-整理算法;在堆區之外還有一個永久代,他用來存儲class類、常量、方法描述等,對永久代的回收主要回收兩部分內容:廢棄常量和無用的類
3.典型的垃圾回收器
垃圾收集算法是內存回收的理論基礎,而垃圾收集器是內存回收的具體實現。
Java 垃圾回收機制