理解Java垃圾回收算法

內(nèi)存區(qū)域

Java虛擬機(jī)在執(zhí)行Java程序的過程中會把他所管理的內(nèi)存劃分為若干個不同的數(shù)據(jù)區(qū)域。Java虛擬機(jī)規(guī)范將JVM所管理的內(nèi)存分為以下幾個運行時數(shù)據(jù)區(qū):程序計數(shù)器琼牧,Java虛擬機(jī)棧,本地方法棧撬槽,Java堆趾撵,方法區(qū)。

image

具體參考:Java內(nèi)存區(qū)域與內(nèi)存溢出

常用的垃圾回收算法:

  • 引用計數(shù)算法:

    給對象添加一個引用計數(shù)器暂题,每當(dāng)有一個地方引用它時敢靡,計數(shù)器值就加1苦银;當(dāng)引用失效時赶站,計數(shù)器值就減1贝椿;任何時刻計數(shù)器值為0 的對象就是不再被使用的陷谱,垃圾回收器將收回該對象所使用的內(nèi)存。
    引用計數(shù)算法實現(xiàn)簡單渣窜,效率很高宪躯,微軟的COM技術(shù)、ActionScript详瑞、Python等都使用了引用計數(shù)算法進(jìn)行內(nèi)存管理臣缀,但是引用計數(shù)算法對于對象之間相互循環(huán)引用問題難以解決,因此java并沒有使用引用計數(shù)算法计寇。
  • 根搜索算法:

    通過一系列的名為“GC Root”的對象作為起點氯窍,從這些節(jié)點向下搜索,搜索所走過的路徑稱為引用鏈(Reference Chain)贝淤,當(dāng)一個對象到GC Root沒有任何引用鏈相連時政供,則該對象不可達(dá),該對象是不可使用的离陶,垃圾收集器將回收其所占的內(nèi)存衅檀。
    主流的商用程序語言C#、java和Lisp都使用根搜素算法進(jìn)行內(nèi)存管理沉眶。
    在java語言中,可作為GC Root的對象包括以下幾種對象:
    a. java虛擬機(jī)棧(棧幀中的本地變量表)中的引用的對象柳击。
    b.方法區(qū)中的類靜態(tài)屬性引用的對象片习。
    c.方法區(qū)中的常量引用的對象。
    d.本地方法棧中JNI本地方法的引用對象状知。

Java中使用的垃圾回收算法:

  1. 引用計數(shù)法:缺點是無法處理循環(huán)引用問題
  2. 標(biāo)記-清除法:標(biāo)記所有從根結(jié)點開始的可達(dá)對象侈离,缺點是會造成內(nèi)存空 間不連續(xù),不連續(xù)的內(nèi)存空間的工作效率低于連續(xù)的內(nèi)存空間,不容易分配內(nèi)存
  3. 復(fù)制算法:將內(nèi)存空間分成兩塊起宽,每次將正在使用的內(nèi)存中存活對象復(fù)制到未使用的內(nèi)存塊中,之后清除正在使用的內(nèi)存塊绿映。算法效率高腐晾,但是代價是系統(tǒng)內(nèi)存折半。適用于新生代(存活對象少淹冰,垃圾對象多)
  4. 標(biāo)記-壓縮算法:標(biāo)記-清除的改進(jìn)樱拴,清除未標(biāo)記的對象時還將所有的存活對象壓縮到內(nèi)存的一端洋满,之后,清理邊界所有空間既避免碎片產(chǎn)生牺勾,又不需要兩塊同樣大小的內(nèi)存快,性價比高翻具。適用于老年代。
  5. 分代
    詳細(xì)內(nèi)容參考: 深入理解java垃圾回收算法
    參考:深入理解 Java 垃圾回收機(jī)制
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末虑乖,一起剝皮案震驚了整個濱河市疹味,隨后出現(xiàn)的幾起案子帜篇,更是在濱河造成了極大的恐慌,老刑警劉巖笙隙,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異竟痰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)铅檩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進(jìn)店門昧旨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祥得,“玉大人,你說我怎么就攤上這事乒疏〈辞В” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵械哟,是天一觀的道長暇咆。 經(jīng)常有香客問我,道長其骄,這世上最難降的妖魔是什么扯旷? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮毯炮,結(jié)果婚禮上耸黑,老公的妹妹穿的比我還像新娘。我一直安慰自己为迈,他們只是感情好缺菌,可當(dāng)我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布男翰。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鸦列。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天顽爹,我揣著相機(jī)與錄音骆姐,去河邊找鬼。 笑死肉渴,一個胖子當(dāng)著我的面吹牛带射,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播券勺,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼关炼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了儒拂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤甸祭,失蹤者是張志新(化名)和其女友劉穎褥影,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凡怎,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡统倒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年房匆,在試婚紗的時候發(fā)現(xiàn)自己被綠了耸成。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片井氢。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡花竞,死狀恐怖掸哑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情苗分,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布躺枕,位于F島的核電站,受9級特大地震影響罢猪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜膳帕,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一薇缅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧汤徽,春花似錦灸撰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壳鹤。三九已至饰迹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間啊鸭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留千扔,地道東北人。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓厘唾,卻偏偏與公主長得像抚垃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鹤树,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1.什么是垃圾回收罕伯? 垃圾回收(Garbage Collection)是Java虛擬機(jī)(JVM)垃圾回收器提供...
    簡欲明心閱讀 89,561評論 17 311
  • 《深入理解Java虛擬機(jī)》筆記_第一遍 先取看完這本書(JVM)后必須掌握的部分追他。 第一部分 走近 Java 從傳...
    xiaogmail閱讀 5,108評論 1 34
  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司懈糯,掛了不少,但最終還是拿到小米赚哗、百度、阿里蜂奸、京東硬萍、新浪、CVTE朴乖、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,277評論 11 349
  • 最近青蘿卜開始上市了,脆脆甜甜的很是爽口买羞,每到這個時節(jié)總是會買幾個回來吃的。 眾所周知畜普,青蘿卜的頭是可以切下來做盆...
    譚惜言閱讀 1,252評論 0 2
  • 我告訴自己吃挑,沒那么愛你 眼睛卻不禁隨你轉(zhuǎn)動 我告訴自己,沒那么愛你 心跳卻因你改變頻率 我告訴自己舶衬,沒那么愛你 卻...
    肆酒漆閱讀 253評論 0 0