JAVA虛擬機(jī)

JAVA虛擬機(jī)

垃圾回收主要是回收堆內(nèi)存语稠。在垃圾回收期(GC)回收之前蛤肌,需要確定哪些對(duì)象可以回收恩溅,有以下幾種方法:

引用計(jì)數(shù)算法?

原理:給對(duì)象添加一個(gè)引用計(jì)數(shù)器乓序,每當(dāng)有一個(gè)地方引用它時(shí)寺酪,計(jì)數(shù)器值就加1;當(dāng)引用失效時(shí)替劈,計(jì)數(shù)器值就減1寄雀;任何時(shí)刻計(jì)數(shù)器都為0的對(duì)象就是不可能再被使用的。這種算法效率高陨献。不過很難解決對(duì)象之間的相互循環(huán)引用的問題盒犹。

根搜索算法(默認(rèn))?

原理:通過一系列的名為“GC Roots”的對(duì)象作為起始點(diǎn),從這些節(jié)點(diǎn)開始向下搜索眨业,搜索所走過的路徑稱為引用鏈急膀,當(dāng)一個(gè)對(duì)象到GC Roots沒有任何引用鏈相連時(shí),則證明此對(duì)象是不可用的龄捡。作為GC Roots的對(duì)象包括以下幾種:

虛擬機(jī)棧中的引用的對(duì)象

方法區(qū)中的類靜態(tài)屬性引用的對(duì)象

方法區(qū)中的常量引用的對(duì)象

本地方法棧中JNI的引用的對(duì)象

引用

強(qiáng)引用卓嫂,類似"Object obj = new Object()"這種,只要強(qiáng)引用存在聘殖,則GC永遠(yuǎn)不會(huì)回收被引用的對(duì)象

軟引用晨雳,指還有用,但是并非必須的對(duì)象就斤,內(nèi)存溢出之前進(jìn)行回收悍募,實(shí)現(xiàn)軟引用可以通過SoftReference類,軟引用主要用戶實(shí)現(xiàn)類似緩存的功能洋机,在內(nèi)存足夠的情況下直接通過軟引用取值坠宴,無(wú)需從繁忙的真實(shí)來(lái)源查詢數(shù)據(jù),提升速度绷旗;當(dāng)內(nèi)存不足時(shí)喜鼓,自動(dòng)刪除這部分緩存數(shù)據(jù)副砍,從真正的來(lái)源查詢這些數(shù)據(jù)。

弱引用庄岖,跟軟引用一樣豁翎,不過強(qiáng)度比軟引用弱一些,第二次垃圾回收時(shí)回收隅忿,實(shí)現(xiàn)弱引用可以通過WeakReference類心剥,弱引用主要用于監(jiān)控對(duì)象是否已經(jīng)被垃圾回收器標(biāo)記為即將回收的垃圾,可以通過弱引用的isEnQueued方法返回對(duì)象是否被垃圾回收器標(biāo)記背桐。

虛引用优烧,是最弱的一種引用關(guān)系,垃圾回收時(shí)回收链峭,無(wú)法通過引用取到對(duì)象值畦娄。主要用于檢測(cè)對(duì)象是否已經(jīng)從內(nèi)存中刪除。

垃圾收集算法

標(biāo)記-清除算法:首先標(biāo)記出所有需要回收的對(duì)象弊仪,在標(biāo)記完成后統(tǒng)一回收所有被標(biāo)記的對(duì)象熙卡,不過該算法有以下缺點(diǎn):

效率低

空間問題,該算法會(huì)產(chǎn)生大量不連續(xù)的內(nèi)存碎片励饵,這樣導(dǎo)致程序在以后的運(yùn)行中如果需要分配較大對(duì)象時(shí)無(wú)法找到足夠的連續(xù)內(nèi)存而觸發(fā)另一次垃圾收集動(dòng)作

復(fù)制算法:將可用內(nèi)存按容量劃分大小相等的兩塊驳癌,每次只使用其中的一塊。當(dāng)一塊內(nèi)存用完了曲横,就將還存活的對(duì)象復(fù)制到另外一塊上面喂柒,然后再把已使用過的內(nèi)存空間一次清理掉。這種算法實(shí)現(xiàn)簡(jiǎn)單禾嫉,效率高,不過會(huì)將可使用的內(nèi)存減少一半蚊丐。如果對(duì)象存活率高就要執(zhí)行較多的復(fù)制操作熙参,將導(dǎo)致效率變低。目前在復(fù)制算法中麦备,通常是將內(nèi)存分為一塊較大的Eden空間和兩塊較小的Survivor空間孽椰,每次只使用Eden和一塊Survivor。當(dāng)回收時(shí)凛篙,將Eden和Survivor中還存活的對(duì)象一次性拷貝到另外一塊Survivor中黍匾,最后清理使用的Eden和Survivor。并且以老年代作為空間分配擔(dān)保呛梆,即Survivor無(wú)法容納的對(duì)象會(huì)直接進(jìn)入老年代锐涯。目前新生代主要采用這個(gè)算法。

標(biāo)記-整理算法:將所有存活的對(duì)象都向一端移動(dòng)填物,然后直接清理掉邊界以外的內(nèi)存纹腌。

分代收集算法:根據(jù)對(duì)象的存活周期的不同將內(nèi)存劃分為幾塊霎终,一般是分為新生代和老年代。然后根據(jù)各個(gè)年代的特點(diǎn)采用最適當(dāng)?shù)氖占惴ㄉ怼P律ǔ2捎脧?fù)制算法莱褒,因?yàn)閷?duì)象生存時(shí)間都不長(zhǎng)。老年代一般采用"標(biāo)記-清理"或者"標(biāo)記-整理"算法回收涎劈,因?yàn)槔夏甏袑?duì)象存活率高广凸,沒有額外空間對(duì)它進(jìn)行分配擔(dān)保。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛛枚,一起剝皮案震驚了整個(gè)濱河市谅海,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坤候,老刑警劉巖胁赢,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異白筹,居然都是意外死亡智末,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門徒河,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)系馆,“玉大人,你說我怎么就攤上這事顽照∮赡ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵代兵,是天一觀的道長(zhǎng)尼酿。 經(jīng)常有香客問我,道長(zhǎng)植影,這世上最難降的妖魔是什么裳擎? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮思币,結(jié)果婚禮上鹿响,老公的妹妹穿的比我還像新娘。我一直安慰自己谷饿,他們只是感情好惶我,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著博投,像睡著了一般绸贡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天恃轩,我揣著相機(jī)與錄音结洼,去河邊找鬼。 笑死叉跛,一個(gè)胖子當(dāng)著我的面吹牛松忍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播筷厘,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鸣峭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了酥艳?” 一聲冷哼從身側(cè)響起摊溶,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎充石,沒想到半個(gè)月后莫换,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骤铃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年拉岁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惰爬。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喊暖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出撕瞧,到底是詐尸還是另有隱情陵叽,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布丛版,位于F島的核電站巩掺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏页畦。R本人自食惡果不足惜锌半,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寇漫。 院中可真熱鬧,春花似錦殉摔、人聲如沸州胳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)栓撞。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瓤湘,已是汗流浹背瓢颅。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弛说,地道東北人挽懦。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像木人,于是被迫代替她去往敵國(guó)和親信柿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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