僅站在應用開發角度簡單闡述整體概念
java中誰來回收垃圾?
java虛擬機啓動後會自動啓動一個有垃圾回收作用的線程,根據需要不定期進行垃圾回收
如何判斷一個實例應該被回收?
簡單來說通過一個引用計數器
回想String和StringBuffer的區別,其中說過改變一個String對象的實際過程是另創建一個String對象,再將引用指向新創建的實例上。注意,這時原來的實例引用數爲0成爲垃圾回收的對象。
即當垃圾回收線程發現一個引用數爲0的對象時就會回收它
而因爲人類現有計算機體系的複雜,引用又分爲很多類型
不同類型的引用有何區別?
強引用(StrongReference):顯式的把一個引用指向一個對象
某個對象只有強引用時,它就永遠不會被回收。
軟引用(SoftReference):可看做一種JVM的加速機制,比如達到當加載一個圖片後避免重複加載,將引用暫存在緩存中
某個對象只有軟引用時,當內存不夠時,會回收這個對象。
弱引用(WeakReference):指一些規範化映射,映射存在時當key和value實例不存在是引用自動被回收
某個對象只有弱引用時,當gc線程回收的時候,它一定會被回收。
虛引用(PlantomReference):提供更靈活的垃圾處理方式,和引用隊列一起使用