Java垃圾回收機(jī)制

垃圾回收機(jī)制主要做以下兩件事情:
1跟蹤并監(jiān)控每個(gè)java對(duì)象,當(dāng)一個(gè)對(duì)象處于不可達(dá)狀態(tài)時(shí)候,回收該對(duì)象所占用的內(nèi)存
2清理內(nèi)存分配,回收過程中產(chǎn)生的碎片
垃圾回收機(jī)制需要完成這兩方面的工作,而這兩方面的工作量都不算太小,因此垃圾回收算法就成為限制java程序運(yùn)行效率的重要因素。實(shí)現(xiàn)高效JVM的一個(gè)重要方面就是提供高效的垃圾回收機(jī)制,高效的垃圾回收機(jī)制既能保證垃圾回收的快速運(yùn)行避免內(nèi)存的分配和回收成為應(yīng)用程序的性能瓶頸,又不能導(dǎo)致應(yīng)用程序的停頓。

垃圾回收的基本算法

實(shí)際上垃圾回收算法不可能實(shí)時(shí)的檢測到j(luò)ava對(duì)象的狀態(tài),因此當(dāng)一個(gè)對(duì)象失去引用時(shí)候,它不會(huì)立即被垃圾回收,而是等垃圾回收運(yùn)行時(shí)才去回收。
對(duì)于一個(gè)垃圾回收的設(shè)計(jì)算法來說可如下:

  • 串行回收和并行回收
    串行回收就是不管系統(tǒng)有多少個(gè)CPU,只使用一個(gè)CPU來執(zhí)行垃圾回收操作,而并行回收就是把整個(gè)回收工作拆分成多部分,每個(gè)部分有一個(gè)CPU負(fù)責(zé),從而讓多個(gè)CPU并行回收,并行回收的效率很高,但復(fù)雜度增加,內(nèi)存碎片也會(huì)增多。
  • 并發(fā)執(zhí)行和應(yīng)用程序停止 ,應(yīng)用程序停止的垃圾回收方式在垃圾回收時(shí)候會(huì)讓程序暫停,并發(fā)執(zhí)行的垃圾回收雖然不會(huì)導(dǎo)致程暫停, 但由于并發(fā) 垃圾回收需要解決和應(yīng)用程序的執(zhí)行沖突(應(yīng)用程序可能會(huì)在垃圾回收的時(shí)候修改對(duì)象)因此并發(fā)執(zhí)行垃圾回收的系統(tǒng)開銷比應(yīng)用程序停止的垃圾回收更高。而且執(zhí)行時(shí)候也需要更多的堆內(nèi)存。
  • 壓縮和不壓縮和復(fù)制算法 為了減少內(nèi)存碎片,支持壓縮的垃圾回收器會(huì)把所有的活的對(duì)象搬遷到一起,然后將之前占用內(nèi)存 全部收回。不壓縮的回收只是回收內(nèi)存 這樣回收的內(nèi)存不可能是連續(xù)的 因此會(huì)有很多的內(nèi)存碎片。較之壓縮回收,不壓縮式的回收只回收內(nèi)存塊,而分配內(nèi)存時(shí)候會(huì)更慢,而且無法解決內(nèi)存碎片的問題,復(fù)制式垃圾回收會(huì)將所有可達(dá)對(duì)象復(fù)制到另一塊相同的內(nèi)存中,這種方式的優(yōu)點(diǎn)是垃圾回收過程不會(huì)產(chǎn)生內(nèi)存碎片,但缺點(diǎn)也很明顯,需要復(fù)制數(shù)據(jù)和額外的內(nèi)存。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 來自: Android夢想特工隊(duì)作者: Aaron主頁: http://www.wxtlife.com/原...
    技術(shù)特工隊(duì)閱讀 4,595評(píng)論 0 28
  • 一、垃圾回收機(jī)制的意義Java語言中一個(gè)顯著的特點(diǎn)就是引入了垃圾回收機(jī)制,使c++程序員最頭疼的內(nèi)存管理的問題迎刃...
    任任任任師艷閱讀 738評(píng)論 0 0
  • 1. 概述 在編寫Java程序時(shí),一般不用內(nèi)存管理,不用像C++一樣需要在程序中手動(dòng)釋放內(nèi)存。JVM的垃圾收集器會(huì)...
    Coding小聰閱讀 530評(píng)論 0 0
  • 1. 垃圾回收的意義在C++中,對(duì)象所占的內(nèi)存在程序結(jié)束運(yùn)行之前一直被占用,在明確釋放之前不能分配給其它對(duì)象;而在...
    愛情小傻蛋閱讀 1,007評(píng)論 0 11
  • 文/云端一夢 風(fēng)舉起孤單的心事從清明的柳尖走到汨羅江浪花上一半明清,一半柔軟 端起打好的粽子想起離騷的韻律在江邊、...
    云端一夢l閱讀 1,431評(píng)論 11 46

友情鏈接更多精彩內(nèi)容