Java GC

java 內(nèi)存區(qū)域劃分

方法區(qū):

1 主要儲存被虛擬機加載的類的信息钟鸵,常量晚伙,靜態(tài)變量拾弃,以及及時編輯器編譯后的代碼等數(shù)據(jù)

2 * 被線程共享

3 方法區(qū)里有一個 運行常量池 , 大部分用于存放靜態(tài)編譯產(chǎn)生的字面量和符號引用丽旅,運行時的常量也可能放在這個常量池里。

虛擬機棧:

1 為Java 方法服務纺棺,方法在執(zhí)行的時候會創(chuàng)建一個棧幀榄笙,用于存儲 局部變量表,操作數(shù)棧五辽,動態(tài)鏈接與方法出口燈办斑,

2 棧為線程私有,生命周期與線程相同杆逗。

3. 局部變量表里存儲的是基本數(shù)據(jù)類型乡翅、returnAddress類型(指向一條字節(jié)碼指令的地址)和對象引用,這個對象引用有可能是指向?qū)ο笃鹗嫉刂返囊?/p>

? 個指針罪郊,也有可能是代表對象的句柄或者與對象相關(guān)聯(lián)的位置蠕蚜。局部變量所需的內(nèi)存空間在編譯器間確定

4.操作數(shù)棧的作用主要用來存儲運算結(jié)果以及運算的操作數(shù),它不同于局部變量表通過索引來訪問悔橄,而是壓棧和出棧的方式

5.每個棧幀都包含一個指向運行時常量池中該棧幀所屬方法的引用靶累,持有這個引用是為了支持方法調(diào)用過程中的動態(tài)連接.動態(tài)鏈接就是將常量池中的符

號引用在運行期轉(zhuǎn)化為直接引用。

本地方法棧:跟虛擬機棧差不多癣疟,主要是為Native方法服務挣柬。

程序計數(shù)器:唯一一個不發(fā)生GC的地方 改變計數(shù)值執(zhí)行字節(jié)碼命令,分支睛挚,循環(huán)邪蛔,跳轉(zhuǎn),異常處理

,線程恢復等扎狱,我感覺跟引用計數(shù)法有些像侧到。

堆:對象的創(chuàng)建勃教,一個回收常在這里發(fā)生。

判斷GC對象

1 引用計數(shù)法

引用計數(shù)法就是給對象設置一個計數(shù)器 每當有一個地方引用這個對象 就將計數(shù)器加一匠抗,引用失效時故源,計數(shù)器就減一。

問題:循環(huán)引用汞贸,造成對象回收不掉绳军。

2 可達性分析

從一個Gc Root 對象向下搜索,如果一個對象到GcRoot沒有任何引用鏈相連著蛙,則說明此對象不可用删铃。

GcRoot 對象

棧中的對象(基本)

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

方法區(qū)常量池引用的對象。

本地方法棧引用的對象

理解上面的 四個 需要對內(nèi)存區(qū)域進行了解以及熟知踏堡。

滿足上述條件后不一定會回收猎唁,還要經(jīng)歷兩次標記的過程。

第一次標記 是否有必要執(zhí)行 finealize()方法顷蟆,當對象沒有覆蓋finealize()方法或者已經(jīng)被虛擬機調(diào)用過诫隅,那么就認為沒有必要,

如果有必要執(zhí)行 finealize()方法帐偎,那么會將這個對象放在 F-Queue的隊列中逐纬,虛擬機觸發(fā)一個線程去執(zhí)行,優(yōu)先級底的線程削樊,

此時Gc會對此對象進行第二次標記豁生,在第二次標記之前,如果這個對象有新的引用漫贞,該對象被移除‘即將回收‘隊列甸箱,如果沒有,則等待回收迅脐。

Java 垃圾回收算法

1 標記-清除

標記回收的對象芍殖,然后統(tǒng)一回收。

優(yōu)點:簡單

缺點:

1 效率低谴蔑,標記跟清除都效率低

2 導致大量的不連續(xù)的內(nèi)存碎片豌骏,導致程序分配較大的對象,沒有充足的內(nèi)存提前進行一次GC(內(nèi)存抖動)

2 復制算法

將內(nèi)存分為兩個相等的兩部分隐锭,每次使用一塊窃躲,當要使用完了,將還存活的對象復制到第二塊內(nèi)存板上钦睡,

然后清除第一塊內(nèi)存框舔,然后在把存活的對象復制回來。(缺點:會浪費內(nèi)存)

改進:

內(nèi)存區(qū)域進行了重新劃分, 8:1:1

較大的那塊 叫 Eden區(qū)刘绣,剩下叫 Survior區(qū)

每次優(yōu)先使用Eden區(qū),弱Eden區(qū)滿挣输,講對象復制到第二塊內(nèi)存纬凤,然后清除Eden區(qū)

如果存活的對象太多,以至于Survior不夠撩嚼,會將這些對象通過分配擔保機制

復制到老年代中(Java 堆)停士。

3 標記-整理

區(qū)分 標記-清除,為了解決標記—清除 產(chǎn)生大量內(nèi)存塊碎片的問題完丽。

當對象存活率較高的時候恋技,也解決了復制算法的效率問題。

前兩個算法的合集吧 在清除無用對象的時候講對象移到另一端逻族,然后清除掉邊界以外的對象蜻底,這樣就不會產(chǎn)

零碎的內(nèi)存碎片了。

4 分代回收

根據(jù)對象的生命周期聘鳞,將堆分為新生代跟老年代薄辅,(永久代),新生代對象生命周期存活的短(感覺這塊是標記)

每次都會有大量的對象死去抠璃,采用復制算法站楚,老年代對象存活時間長,所以可以考慮 標記-清除搏嗡,或者標記—整理窿春。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市采盒,隨后出現(xiàn)的幾起案子旧乞,更是在濱河造成了極大的恐慌,老刑警劉巖纽甘,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件良蛮,死亡現(xiàn)場離奇詭異,居然都是意外死亡悍赢,警方通過查閱死者的電腦和手機决瞳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來左权,“玉大人皮胡,你說我怎么就攤上這事∩统伲” “怎么了屡贺?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我甩栈,道長泻仙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任量没,我火速辦了婚禮玉转,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘殴蹄。我一直安慰自己究抓,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布袭灯。 她就那樣靜靜地躺著刺下,像睡著了一般。 火紅的嫁衣襯著肌膚如雪稽荧。 梳的紋絲不亂的頭發(fā)上橘茉,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音蛤克,去河邊找鬼捺癞。 笑死,一個胖子當著我的面吹牛构挤,可吹牛的內(nèi)容都是我干的髓介。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼筋现,長吁一口氣:“原來是場噩夢啊……” “哼唐础!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起矾飞,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤一膨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后洒沦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體豹绪,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年申眼,在試婚紗的時候發(fā)現(xiàn)自己被綠了瞒津。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡括尸,死狀恐怖巷蚪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情濒翻,我是刑警寧澤屁柏,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布啦膜,位于F島的核電站,受9級特大地震影響淌喻,放射性物質(zhì)發(fā)生泄漏僧家。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一裸删、第九天 我趴在偏房一處隱蔽的房頂上張望啸臀。 院中可真熱鬧,春花似錦烁落、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至轧铁,卻和暖如春每聪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背齿风。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工药薯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人救斑。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓童本,卻偏偏與公主長得像,于是被迫代替她去往敵國和親脸候。 傳聞我的和親對象是個殘疾皇子穷娱,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

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