JVM垃圾回收

JVM垃圾回收

內(nèi)存結(jié)構(gòu)

要想理解jvm的垃圾回收機(jī)制晰奖,必須先知道java虛擬機(jī)的內(nèi)存結(jié)構(gòu)。

  1. 程序計數(shù)器
    程序計數(shù)器是一塊較小的內(nèi)存空間今布,你可以把它看成是當(dāng)前線程所執(zhí)行字節(jié)碼文件的行號指示器褒链。它存在的主要意義就是,在切換回當(dāng)前線程時可以恢復(fù)到切換之前的狀態(tài)姻僧。它也是java虛擬機(jī)中唯一沒有規(guī)定任何OutOfMemoryError情況的區(qū)域。

  2. java虛擬機(jī)棧
    這個區(qū)域是線程私有的蒲牧,主要用來存放基礎(chǔ)類型如int撇贺,對象的引用(注意不是對象本身),局部變量冰抢。
    在Java虛擬機(jī)規(guī)范中松嘶,對這個區(qū)域 規(guī)定了 兩種 異常 狀況: 如果 線程 請求 的 棧 深度 大于 虛擬 機(jī) 所 允許 的 深度, 將 拋出 StackOverflowError 異常挎扰; 如果 虛擬 機(jī) 棧 可以 動態(tài) 擴(kuò)展翠订, 如果 擴(kuò)展 時 無法 申請 到 足夠 的 內(nèi)存巢音, 就會 拋出 OutOfMemoryError 異常。

  3. 本地方法棧
    和虛擬機(jī)棧一樣尽超,只不過主要針對native方法官撼。

  4. java堆
    java堆是java虛擬機(jī)管理內(nèi)存中最大的一塊,它的目的是管理對象內(nèi)存的分配橙弱,所以垃圾回收主要集中在堆中歧寺。它是線程共享的。

  5. 方法區(qū)
    方法區(qū)和堆一樣棘脐,也是各個線程共享的斜筐。它主要存儲類信息、常量蛀缝、以及靜態(tài)變量顷链、及時編譯的代碼。

程序計數(shù)器屈梁、虛擬機(jī)棧嗤练、本地方法棧這幾塊內(nèi)存區(qū)域,隨線程而生在讶,隨線程而滅煞抬,因此這幾塊區(qū)域不需要內(nèi)存回收并不需要擔(dān)心。
而堆和方法區(qū)中的對象都是運(yùn)行時創(chuàng)建的构哺,對象創(chuàng)建和回收都需要進(jìn)行管理革答。

如何識別垃圾對象

要想進(jìn)行垃圾回收,識別出“垃圾”很重要曙强。在jvm中使用的是可達(dá)性分析算法進(jìn)行識別残拐。它主要是通過一個對象是否在gcRoots對象的引用鏈中來確定對象是否需要回收的。而GcRoot主要包括:棧幀中的變量(方法中的局部變量)碟嘴、方法區(qū)中的常量溪食、方法區(qū)中的靜態(tài)變量、jni中引用的對象娜扇。

垃圾回收算法

識別出內(nèi)存中無用對象以后错沃,就需要進(jìn)行清理,主要的垃圾回收算法主要有三種雀瓢。

  1. 標(biāo)記-清理算法
    這種算法主要是先標(biāo)記出無用對象枢析,在一次性清理掉他們。這種算法有兩大弊端致燥,首先效率上標(biāo)記和清理都不算高效操作,第二內(nèi)存上排截,這樣會產(chǎn)生大量的不連續(xù)內(nèi)存嫌蚤,空間利用率不高

  2. 復(fù)制算法
    這種算法將內(nèi)存分為兩塊辐益,每次垃圾回收時將有用內(nèi)存移入另一塊內(nèi)存中,然后清空這一側(cè)的內(nèi)存脱吱。這種算法智政,浪費(fèi)了一半的內(nèi)存空間。

  3. 標(biāo)記-整理算法
    這種算法標(biāo)記過程和標(biāo)記清理算法很像箱蝠,但是在清理時會將存活對象都像一段移動续捂,然后直接清理掉端邊界以外的內(nèi)存空間。

  4. 分代回收算法
    該算法宦搬,將內(nèi)存分為年輕代和老年代牙瓢,針對他們不同的特點(diǎn)采用不同回收算法,在年輕代中大部分對象都是朝生夕死间校,因此采用復(fù)制算法矾克,將內(nèi)存分為eden區(qū)和兩塊survivor區(qū),一般按8:1:1的比例分配憔足,內(nèi)存分配主要在eden區(qū)和其中一塊survivor區(qū)中胁附,當(dāng)進(jìn)行垃圾回收時,將存活內(nèi)存移至另一塊survivor區(qū)中滓彰,當(dāng)另一塊survivor區(qū)內(nèi)存不夠時控妻,會臨時存入老年代中。在老年代中的對象都死生命周期很長的揭绑,因此采用標(biāo)記清理或標(biāo)記整理算法進(jìn)行垃圾回收弓候。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市洗做,隨后出現(xiàn)的幾起案子弓叛,更是在濱河造成了極大的恐慌,老刑警劉巖诚纸,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撰筷,死亡現(xiàn)場離奇詭異,居然都是意外死亡畦徘,警方通過查閱死者的電腦和手機(jī)毕籽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來井辆,“玉大人关筒,你說我怎么就攤上這事”保” “怎么了蒸播?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我袍榆,道長胀屿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任包雀,我火速辦了婚禮宿崭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘才写。我一直安慰自己葡兑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布赞草。 她就那樣靜靜地躺著讹堤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪房资。 梳的紋絲不亂的頭發(fā)上蜕劝,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機(jī)與錄音轰异,去河邊找鬼岖沛。 笑死,一個胖子當(dāng)著我的面吹牛搭独,可吹牛的內(nèi)容都是我干的婴削。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼牙肝,長吁一口氣:“原來是場噩夢啊……” “哼唉俗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起配椭,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤虫溜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后股缸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衡楞,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年敦姻,在試婚紗的時候發(fā)現(xiàn)自己被綠了瘾境。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡镰惦,死狀恐怖迷守,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旺入,我是刑警寧澤兑凿,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布凯力,位于F島的核電站,受9級特大地震影響礼华,放射性物質(zhì)發(fā)生泄漏沮协。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一卓嫂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧聘殖,春花似錦晨雳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至突照,卻和暖如春帮非,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背讹蘑。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工末盔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人座慰。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓陨舱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親版仔。 傳聞我的和親對象是個殘疾皇子游盲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

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

  • 0. 前言 JVM筆記系列,以JDK1.7為基準(zhǔn)蛮粮,主要以《深入理解Java虛擬機(jī)》(第二版)和《Java虛擬機(jī)規(guī)范...
    郭尋撫閱讀 910評論 0 3
  • 注意 : 本系列文章為學(xué)習(xí)系列,部分內(nèi)容會取自相關(guān)書籍或者網(wǎng)絡(luò)資源,在文章中間和末尾處會有標(biāo)注 垃圾回收的意義 它...
    lyk2112閱讀 331評論 0 0
  • 本文主要講述JVM中幾種常見的垃圾回收算法和相關(guān)的垃圾回收器益缎,以及常見的和GC相關(guān)的性能調(diào)優(yōu)參數(shù)。 GC Root...
    4ea0af17fd67閱讀 282評論 0 0
  • https://www.ziwenxie.site/2017/07/24/java-jvm-gc/ 引言 本文主要...
    4ea0af17fd67閱讀 181評論 0 1
  • 月亮升起來了然想,半月莺奔,掛在瓦藍(lán)的天空,太陽的余暉還未完全隱在大山之后又沾,映著山戀黑紅的輪廓弊仪,隨著天色漸暗,幾顆星星閃現(xiàn)...
    木木成林_陳冉閱讀 314評論 2 2