Java垃圾回收器 原理 優點

關於Java垃圾回收器的一些問題的整理:

1、Java垃圾回收器的工作原理?

答:對於java垃圾回收器(Garbage Collector下面用GC表示)來說,當程序員新建對象的時候GC就開始監控這個對象在內存的大小、地址和使用情況。GC採用有向圖的方式來記錄和管理堆內存中的多有對象,通過這個方式來確定哪些對象是“可達的”,哪些對象是“不可達的”。當GC確定對象是“不可達”的,GC就將對象的內存收回,以便於分配給其他對象使用。

2、Java垃圾回收器可以馬上收回內存嗎?

答:可以。

3、有什麼方法可以通知Java虛擬機收回內存?

答:可以手動執行System.gc(),通知java虛擬機進行垃圾回收

4、Java垃圾回收器的優點?

答:Java語言中一個顯著的特點就是引入了垃圾回收機制,使c++程序員最頭疼的內存管理的問題迎刃而解,它使得Java程序員在編寫程序的時候不再需要考慮內存管理。由於有個垃圾回收機制,Java中的對象不再有"作用域"的概念,只有對象的引用纔有"作用域"。垃圾回收可以有效的防止內存泄露,有效的使用可以使用的內存。垃圾回收器通常是作爲一個單獨的低級別的線程運行,不可預知的情況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清楚和回收,程序員不能實時的調用垃圾回收器對某個對象或所有對象進行垃圾回收。回收機制有分代複製垃圾回收和標記垃圾回收,增量垃圾回收。


Java垃圾回收器的詳細解釋:

        當Java虛擬機啓動並運行某個程序後,它所能使用的內存總量的上限通常是固定的。在程序剛開始運行的時候,虛擬機中的大部分內存都處於空閒可用的狀態。隨着程序的運行,不斷有空閒的內存區域被分配給程序運行所需的對象來使用。經過一段時間後,虛擬機的內存大概就可以分爲三類:當前仍處於空閒狀態的內存、正在被程序所使用的內存、程序已經不再使用的內存。第二類和第三類內存的區別就在於其所對應的對象是否處於活躍狀態。一個對象對於活躍狀態的含義是當前程序中海存在指向該對象的引用。如果沒有引用指向i個對象,那麼說明該對象無法被運行的程序所使用,他所佔用的內存會被當成垃圾來回收。

        隨着程序的不斷運行,虛擬機的內存中可用的空閒空間會越來越少,垃圾越來越多。這時就需要運行垃圾回收器來回收內存中的垃圾區域,一共下次內存分配時使用。Java虛擬機的垃圾回收器是運行在一個獨立的線程中的,它會根據當前虛擬機中的內存狀態來決定什麼時候進行垃圾回收工作。每次垃圾回收時所處理的內存區域的範圍也是不同的。垃圾回收器的具體運行時間和頻率無法實現預計,取決於垃圾回收器的實現算法。不同的虛擬機實現中的垃圾回收算法也有所不同。

       垃圾回收線程和當前應用程序同時在Java虛擬機中運行,因此當前運行程序會受到垃圾回收器的影響。

        在垃圾回收器的實現方式中,通常有很多因素需要考慮和權衡,其中與當前運行程序相關的是垃圾回收器的運行方式。一般來說有併發運行和暫停執行兩種。併發運行含義是指垃圾回收器與程序同時運行,而暫停執行在垃圾回收器運行時程序暫停運行。併發運行的方式對程序影響較小,但對垃圾回收器的實現要求較高,實現起來也更復雜

        雖然大多時候垃圾回收器的運行時間和頻率是無法預計的,但是程序仍然可以在特定的時間建議垃圾回收器進行回收工作,通過System.gc方法可以建議垃圾回收器立即運行。不過在這種情況下,垃圾回收器也可以選擇不運行。


發佈了21 篇原創文章 · 獲贊 5 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章