java進階篇--垃圾回收算法有哪些?

說到 Java 虛擬機不得不提的一個詞就是“垃圾回收”(GC,Garbage Collection),而垃圾回收的執行速度則影響着整個程序的執行效率,所以我們需要知道更多關於垃圾回收的具體執行細節,以便爲我們選擇合適的垃圾回收器提供理論支持。

我們本課時的面試題是,如何判斷一個對象是否“死亡”?垃圾回收的算法有哪些?

典型回答

垃圾回收器首先要做的就是,判斷一個對象是存活狀態還是死亡狀態,死亡的對象將會被標識爲垃圾數據並等待收集器進行清除。

判斷一個對象是否爲死亡狀態的常用算法有兩個:引用計數器算法和可達性分析算法。

引用計數算法(Reference Counting) 屬於垃圾收集器最早的實現算法了,它是指在創建對象時關聯一個與之相對應的計數器,當此對象被使用時加 1,相反銷燬時 -1。當此計數器爲 0 時,則表示此對象未使用,可以被垃圾收集器回收。

引用計數算法的優缺點很明顯,其優點是垃圾回收比較及時,實時性比較高,只要對象計數器爲 0,則可以直接進行回收操作;而缺點是無法解決循環引用的問題,比如以下代碼:
class CustomOne {
    private CustomTwo two;
    public CustomTwo getCustomTwo() {
        return two;
    }
    public void setCustomTwo(CustomTwo two) {
        this.two = two;
    }
}
class CustomTwo {
    private CustomOne one;
    public CustomOne getCustomOne() {
        return one;
    }
    public void setCustomOne(CustomOne one) {
        this.one = one;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章