1. 程式人生 > >安全程式設計(十)- 垃圾收集器

安全程式設計(十)- 垃圾收集器

1.Java中垃圾收集器有什麼作用?什麼時候進行垃圾回收?

        眾所周知,基本資料型別,區域性變數都是存放在棧記憶體中的,用完就消失;而用new建立的例項化物件和陣列,是存放在堆記憶體中的,用完之後就需要一個東西來清除回收它們。

        在垃圾收集器對這些“垃圾”進行回收時,要判斷哪些物件還“存活”著,哪些物件已經“死去”(即不可能被任何途徑使用的物件)了。

        垃圾回收的目的就是識別並丟棄應用不再使用的物件來釋放和重用資源。

2.System.gc()和Runtime.gc()的作用是什麼?

        所謂GC,就是Gabage Collection的意思!兩者都是呼叫建議Java虛擬機器的垃圾回收器執行回收的記憶體垃圾!而且,兩者的建議有可能被Java虛擬機器拒絕。GC會週期性的執行,Java虛擬機器由JVM決定執行的時機。

3.finalize()方法什麼時候被呼叫?

        finalize()方法,Java方法執行finalize()方法在垃圾收集器從記憶體中清除物件之前做一些有必要的清理工作。這個方法是垃圾收集器確定這個物件沒有被引用時對這個物件呼叫的。在釋放物件佔用記憶體之前,垃圾收集器會呼叫finalize()方法,一般這個方法會建議釋放物件佔用的記憶體!

4.Java有無解構函式及相關概念?

        Java沒有解構函式及相關概念,代之的是Java的垃圾回收機制。c++中,如果程式沒有缺陷,解構函式會被自動呼叫並且完成清理工作,這個過程是一定會執行的;而Java的垃圾回收只與記憶體有關,在記憶體未被耗盡之前,那麼與垃圾回收相關的任何動作都不會執行(尤其是finalize()方法)。

5.如果物件的引用被置為null,垃圾收集器是否會立即釋放物件佔用的記憶體?

        不會,因為還沒確定這個引用是否不可恢復使用!