JVM學習(四)——gc回收機制

最近復(fù)習Java基礎(chǔ)細節(jié)的時候看Thking in Java;書上有提到兩種垃圾回收機制践啄,“停止-復(fù)制”浇雹、“標記-清掃”;


  • 停止-復(fù)制:將暫停程序的運行往核,然后將所有存活的對象從當前堆復(fù)制到另一個堆箫爷,而沒有被復(fù)制的對象都是垃圾魂角;當對象被復(fù)制到新堆時岂津,它們是一個挨著一個的色难,所以新堆保持緊湊排列外潜;然后就可以直接分配新空間了

  • 標記-清掃:從堆棧和靜態(tài)存儲區(qū)出發(fā)吸耿,遍歷所有的引用遮咖,進而找出所有存活的對象睡腿;每找到一個存活對象买羞,就會給對象一個標記非春,這個過程不會回收任何對象柱徙;當全部標記工作完成時,清掃動作開始奇昙;

JVM采用自適應(yīng)的垃圾回收機制:JVM會進行監(jiān)視护侮,若所有對象都很穩(wěn)定,垃圾回收器效率降低储耐,就切換為“標記-清掃”模式羊初;當JVM跟蹤“標記-清掃”的效果,發(fā)現(xiàn)堆空間有很多碎片時,就會切換回“停止-復(fù)制”方式长赞;

垃圾回收

垃圾回收又稱gc晦攒,gc是運行在JVM中,回收應(yīng)用程序中創(chuàng)建的無用的對象

什么是垃圾

垃圾就是沒有任何價值得哆,沒有任何用的東西

如何判斷垃圾

Java通過引用于對象進行關(guān)聯(lián)脯颜,操作一個對象;被引用相關(guān)聯(lián)的就不是垃圾贩据;
那么沒有引用指向這個對象栋操,也就是說該對象已經(jīng)沒有任何引用,那么它就是垃圾乐设;

判定“垃圾”的方法

  • 引用計數(shù)算法
    1.給對象添加計數(shù)器讼庇,如果引用,計數(shù)器+1近尚;
    2.引用失效蠕啄,則計數(shù)器-1;
    3.任何時刻計數(shù)器為0的對象不能再使用了

  • 根搜索法
    1.gc roots為起點戈锻,從這個節(jié)點開始向下搜索
    2.所走過的路徑歼跟,用Wie引用鏈
    3.對象到gc roots沒有任何鏈相連,對象不可用

常見的垃圾回收場景

  • 對象被賦值null格遭,或手動釋放

  • 弱引用
    若一個對象具有弱引用哈街,在GC線程掃描內(nèi)存區(qū)域的過程中,不管當前內(nèi)存空間足夠與否拒迅,都會回收內(nèi)存骚秦,使用弱引用 構(gòu)建非敏感數(shù)據(jù)的緩存。

弱引用申明:

WeakReferenceweakReference=new WeakReference(new User());
  • 虛引用
    如果一個對象僅持有虛引用璧微,在任何時候都可能被垃圾回收作箍,虛引用與軟引用和弱引用的一個區(qū)別在于:虛引用必須和引用隊列聯(lián)合使用,虛引用主要用來跟蹤對象 被垃圾回收的活動前硫。

虛引用申明:

PhantomReference phantomReference=new PhantomReference(new User(),new ReferenceQueue());

gc回收器

  • gc的劃分
    新域:儲存所有生成的對象
    舊域:新域中的對象經(jīng)過幾次gc之后胞得,沒有被回收,進入舊域中
    永久域:存儲類和方法對象屹电,從配置的角度看阶剑,這個域是獨立的,不包括在JVM堆內(nèi)危号。默認為4M牧愁。
  • 新域
    新域中會被分為三個部分:一個緩沖區(qū),兩個休閑區(qū)
    新域中外莲,產(chǎn)生的大部分對象都會被回收猪半,少部分進入舊域

1.第一個部分叫做Eden(伊甸園)
2.輔助的生成空間(幼兒園)
A空間…
B空間…

  • 舊域
    舊域也被分為幾部分,但是舊域中,存活的對象就比較多办龄,所以,舊域中一般回收的對象會比較少

  • 永久域
    一路下來淋昭,如果對象還未被回收俐填,那么久會流入永久域中存起來,并不是對象到這里了翔忽,gc就不去回收了英融,只是gc不太會去回收這里面的對象。

垃圾回收器算法

  • Mark-Sweep算法

  • Copying算法

  • Mark-Compact算法:為了解決空間浪費問題而改進的算法歇式;
    1.標記階段和Mark-Sweep一樣
    2.完成標記后驶悟,不直接清除回收對象,將對象移向一段
    3.清理邊界內(nèi)存

  • Generational Collection算法(分代收集法):根據(jù)存活的生命周期分為了:新生代材失,老年代和永久代痕鳍,也就是新區(qū),舊區(qū)和永久區(qū)

1.根據(jù)存活的生命周期將內(nèi)存分為若干個區(qū):新生代和老年代和永久代
2.新生代:每次都回收大量對象——>Copying復(fù)制法
3.老年代:每次都回收少量對象——>Mark-Compact法
4.永久代:存儲class類龙巨,常量笼呆,方法描述:回收廢棄常量和無用類

看了CSDN上曾淘前輩的這篇博文后,我想分代收集法應(yīng)該就是Thking in Java中所描述的自適應(yīng)方法


出處:http://blog.csdn.net/u011546655/article/details/52186044
資料借鑒:《Thking in Java》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旨别,一起剝皮案震驚了整個濱河市诗赌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌秸弛,老刑警劉巖铭若,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異递览,居然都是意外死亡叼屠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門非迹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來环鲤,“玉大人,你說我怎么就攤上這事憎兽±淅耄” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵纯命,是天一觀的道長西剥。 經(jīng)常有香客問我,道長亿汞,這世上最難降的妖魔是什么瞭空? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上咆畏,老公的妹妹穿的比我還像新娘南捂。我一直安慰自己,他們只是感情好旧找,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布溺健。 她就那樣靜靜地躺著,像睡著了一般钮蛛。 火紅的嫁衣襯著肌膚如雪鞭缭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天魏颓,我揣著相機與錄音岭辣,去河邊找鬼。 笑死甸饱,一個胖子當著我的面吹牛沦童,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播叹话,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼搞动,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了渣刷?” 一聲冷哼從身側(cè)響起鹦肿,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辅柴,沒想到半個月后箩溃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡碌嘀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年涣旨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片股冗。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡霹陡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出止状,到底是詐尸還是另有隱情烹棉,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布怯疤,位于F島的核電站浆洗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏集峦。R本人自食惡果不足惜伏社,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一抠刺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧摘昌,春花似錦速妖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至挺举,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間烘跺,已是汗流浹背湘纵。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留滤淳,地道東北人梧喷。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像脖咐,于是被迫代替她去往敵國和親铺敌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

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

  • 1.什么是垃圾回收屁擅? 垃圾回收(Garbage Collection)是Java虛擬機(JVM)垃圾回收器提供...
    簡欲明心閱讀 89,501評論 17 311
  • 原文閱讀 前言 這段時間懈怠了偿凭,罪過! 最近看到有同事也開始用上了微信公眾號寫博客了派歌,挺好的~給他們點贊弯囊,這博客我...
    碼農(nóng)戲碼閱讀 5,972評論 2 31
  • 一. 垃圾回收的意義 在C++中,對象所占的內(nèi)存在程序結(jié)束運行之前一直被占用胶果,在明確釋放之前不能分配給其它對...
    Stan_Z閱讀 1,932評論 0 25
  • 這篇文章是我之前翻閱了不少的書籍以及從網(wǎng)絡(luò)上收集的一些資料的整理匾嘱,因此不免有一些不準確的地方,同時不同JDK版本的...
    高廣超閱讀 3,835評論 0 18
  • 來自: Android夢想特工隊作者: Aaron主頁: http://www.wxtlife.com/原...
    技術(shù)特工隊閱讀 4,373評論 0 28