詳解GC工作原理

Java的內存管理就是對象的分配和釋放問題。new爲對象申請內存空間。內存釋放由GC完成。

GC爲了能夠正確釋放對象,必須監控每一個對象的運行狀態,包括對象的申請,引用,被引用,賦值等,GC都要進行監控。

監視對象是爲了更準確,及時的釋放對象,而釋放對象的原則就是對象不再引用。

爲了更好的理解GC的工作原理,我們可以將對象考慮爲有向圖的頂點,將引用關係考慮爲圖的有向邊,有向邊從引用者指向被執行的對象。另外,每個線程對象作爲一個圖的起始頂點,例如大多程序從main函數開始執行,那麼該圖就是以main進程頂點開始的一棵樹。在這個有向圖中,根頂點可達的對象都是有效對象,GC不回收這些對象。如果某個對象(連通子圖)與這個根頂點不可達(注意該圖爲有向圖)那麼我們認爲這些對象不再被引用,可以被GC回收。

用有向圖表示內存管理,對於程序的每一個時刻,都有一個有向圖表示JVM的內存分配情況。



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