2018-04-10

Java內(nèi)存回收機(jī)制

在java中塘幅,內(nèi)存的分配大致分為:堆眼耀,棧骗爆、方法區(qū)、本地方法區(qū)挚币,程序計(jì)數(shù)器;本地方法區(qū)扣典,程序計(jì)數(shù)器妆毕,棧隨著線程的生滅而生滅,不需要我們關(guān)心內(nèi)存激捏,方法區(qū)和堆才是垃圾收集器所關(guān)注的部分设塔。

1 Java中對象是否存活算法

如何判斷一個(gè)對象可以被回收?在Java中远舅,采用的是可達(dá)性分析算法:通過一系列的"GC Roots"對象為起點(diǎn)闰蛔,向下搜索,搜索的路徑叫做引用鏈图柏,當(dāng)某些對象無法與任意一個(gè)"GC Roots"對象的引用鏈向連序六,則這個(gè)對象是不可用的。

GC Root對象

1蚤吹、棧中引用的對象
2例诀、方法區(qū)中類靜態(tài)屬性引用的對象
3、方法區(qū)中常亮引用的對象
4裁着、本地方法棧JNI引用的對象

Java中的四種引用

1繁涂、強(qiáng)引用(Strong Refernce):Java中最常用的引用,像二驰,new Object();只要強(qiáng)引用還在扔罪,對象就永遠(yuǎn)不會被回收被引用的對象;
2桶雀、軟引用(Soft Refernce):在系統(tǒng)發(fā)生內(nèi)存溢出異常之前矿酵,會將這類對象列進(jìn)回收范圍進(jìn)行第二次回收唬复,如果這次回收內(nèi)存依然不足,才會發(fā)生內(nèi)存溢出異常全肮。
3敞咧、弱引用(Weak Refernce):這類引用的對象,只能存活到下次GC之前辜腺,不論內(nèi)存是否充足休建,都會被回收;
4哪自、虛引用(Phantom Refernce):這類應(yīng)用完全不會對對象的什么周期構(gòu)成影響丰包,也無法通過虛引用獲取對象,該引用的目的是在GC回收時(shí)收到一個(gè)系統(tǒng)通知壤巷;

2 垃圾收集算法

在垃圾被回收以前邑彪,需要對對象進(jìn)行判斷處理,在Java中胧华,采用分代收集算法寄症,將對象分為新生代和老年代,針對這兩種情況矩动,分別采用不同的算法有巧;

1、新生代:采用復(fù)制算法悲没,將內(nèi)存按照1:1分為2部分篮迎,每次使用其中的一個(gè),當(dāng)使用的這個(gè)內(nèi)存用完示姿,就將還存活的對象復(fù)制到另一塊上甜橱,然后刪除這塊上的所有對象,優(yōu)點(diǎn)是實(shí)現(xiàn)簡單栈戳,運(yùn)行高效岂傲,不過在實(shí)際中,并不是按照1;1的比例分配子檀,而是按照8:1:1的比例分為3塊(Eden:Survivor:Survivor)镊掖,每次使用Eden和一個(gè)Survivor,回收時(shí)褂痰,將還存活的對象復(fù)制到另一塊Survivor上亩进,在刪除Eden和用過的Survivor;
2缩歪、老年代:采用"標(biāo)記-清理"或者"標(biāo)記-整理"算法镐侯。"標(biāo)記-清理",分為標(biāo)記和清理2個(gè)階段,先將需要清理的對象標(biāo)記苟翻,最后統(tǒng)一清理,不過有2大缺點(diǎn):效率問題骗污,空間碎片化崇猫;"標(biāo)記-整理",同樣分為2部分需忿,標(biāo)記诅炉,清理,在清理部分屋厘,不是直接清除垃圾涕烧,而是先將所以存活的對象向一端移動(dòng),最后在清理邊界以外的內(nèi)存汗洒。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末议纯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子溢谤,更是在濱河造成了極大的恐慌瞻凤,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件世杀,死亡現(xiàn)場離奇詭異阀参,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瞻坝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門蛛壳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人所刀,你說我怎么就攤上這事衙荐。” “怎么了勉痴?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵赫模,是天一觀的道長。 經(jīng)常有香客問我蒸矛,道長瀑罗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任雏掠,我火速辦了婚禮斩祭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘乡话。我一直安慰自己摧玫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著诬像,像睡著了一般屋群。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坏挠,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天芍躏,我揣著相機(jī)與錄音,去河邊找鬼降狠。 笑死对竣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的榜配。 我是一名探鬼主播否纬,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蛋褥!你這毒婦竟也來了临燃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤壁拉,失蹤者是張志新(化名)和其女友劉穎谬俄,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弃理,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡溃论,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痘昌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钥勋。...
    茶點(diǎn)故事閱讀 40,424評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖辆苔,靈堂內(nèi)的尸體忽然破棺而出算灸,到底是詐尸還是另有隱情,我是刑警寧澤驻啤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布菲驴,位于F島的核電站,受9級特大地震影響骑冗,放射性物質(zhì)發(fā)生泄漏赊瞬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一贼涩、第九天 我趴在偏房一處隱蔽的房頂上張望巧涧。 院中可真熱鬧,春花似錦遥倦、人聲如沸谤绳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缩筛。三九已至消略,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間歪脏,已是汗流浹背疑俭。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留婿失,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓啄寡,卻偏偏與公主長得像豪硅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子挺物,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評論 2 359

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