垃圾回收

背景

與C++對比,C++的內(nèi)存回收是有C++的代碼控制的嫁蛇,而JAVA的內(nèi)存回收是由JVM的垃圾回收器控制的齿坷,看起來JAVA的垃圾回收更“自動化”,但是當需要排查內(nèi)存溢出和內(nèi)存泄漏問題時狰闪,垃圾回收器成為系統(tǒng)的瓶頸疯搅,此時就需要對這些“自動化”的技術實施監(jiān)控和調節(jié)濒生。

  • 內(nèi)存溢出:程序報警分配的內(nèi)存空間不夠用
  • 內(nèi)存泄漏:是指程序在申請內(nèi)存后,無法釋放已申請的內(nèi)存空間幔欧,一次內(nèi)存泄露危害可以忽略罪治,但內(nèi)存泄露堆積后果很嚴重,無論多少內(nèi)存,遲早會被占光礁蔗。
  • 內(nèi)存泄漏會導致內(nèi)存溢出

GC的區(qū)域

jvm的運行時數(shù)據(jù)區(qū)主要分為方法區(qū)觉义、堆、虛擬機棧浴井、本地方法棧晒骇、程序計數(shù)器。
其中磺浙,虛擬機棧洪囤、本地方法棧、程序計數(shù)器是線程私有的撕氧,一旦線程執(zhí)行完成瘤缩,內(nèi)存就會自然回收。
方法區(qū)伦泥、堆是線程共用的剥啤,不會隨著線程結束而回收锦溪,所以GC主要是針對方法區(qū)和堆。

GC的的目標對象

決定對象的內(nèi)存空間是否需要被回收府怯,主要由兩種方式引用計數(shù)和可達性分析

引用計數(shù)

引用計數(shù)的方式可以簡單高效的實現(xiàn)刻诊,但是因為存在缺陷(一旦出現(xiàn)循環(huán)引用則永遠不能被回收),所以沒有的jvm的GC中是用富腊,

可達性分析

可達性分析是指從GC ROOTS出發(fā)坏逢,根據(jù)依賴關系是否可以達到指定的對象,如果可達赘被,則對象不能被回收是整,如果不可能,則對象可以被回收民假。
另外浮入,除了強引用外,還有軟引用羊异、弱引用事秀、虛引用等,主要一次隨著應用強度而減弱野舶,而在空間回收時易迹,按照相反次序進行內(nèi)存回收。

GC roots的對象主要擴一下四種:

  • 虛擬機棧引用的對象
  • 本地方法棧應用的對象
  • 方法區(qū)引用的對象
  • 常量池引用的對象

GC的算法

垃圾回收的算法主要包括四種:

  • 標記-清除
  • 標記-復制
  • 標記-整理
  • 分帶收集算法

標記-清除

一次標記平道,一次請求睹欲,缺點是回收效率低,并且造成大量的內(nèi)存碎片一屋,雖然有諸多缺點但是卻是其他后續(xù)的算法的基礎

標記-復制

將空間分成相等的兩部分窘疮,每次只使用一塊,雖然效率提高冀墨,但是也造成了大量的空間浪費

標記-整理

在“標記-清除”的基礎上闸衫,對剩余的空間進行碎片整理,這樣提高了空間的使用率诽嘉,降低了下次分配內(nèi)存空間因為連續(xù)空間不足而導致需要再次GC的問題

分帶收集算法

根據(jù)對象的生命周期特性蔚出,90%以上新生對象是很快就要被回收的,所以整體上將內(nèi)存空間分為新生代和老年代虫腋,并且將新生代分為Eden和兩個相等的Survivor區(qū)骄酗。新生對象分配的空間在Eden和一個survivor中,每次minor GC后岔乔,將存貨的對象負責到另一個survivor上酥筝。
默認參數(shù)-XX:SurvivorRatio=8
Eden:s0:s1=8:1:1

GC的類型

  • serial
  • ParNew
  • CMS
  • Parallel
  • parallel Old
  • serial old
  • G1

GC的日志

  • 進程實例運行時間
  • GC類型
  • GC區(qū)域
  • 區(qū)域的內(nèi)存空間變化
  • 實例的內(nèi)存空間變化
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市雏门,隨后出現(xiàn)的幾起案子嘿歌,更是在濱河造成了極大的恐慌掸掏,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宙帝,死亡現(xiàn)場離奇詭異丧凤,居然都是意外死亡,警方通過查閱死者的電腦和手機步脓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門愿待,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人靴患,你說我怎么就攤上這事仍侥。” “怎么了鸳君?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵农渊,是天一觀的道長。 經(jīng)常有香客問我或颊,道長砸紊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任囱挑,我火速辦了婚禮醉顽,結果婚禮上,老公的妹妹穿的比我還像新娘平挑。我一直安慰自己游添,他們只是感情好,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布弹惦。 她就那樣靜靜地躺著否淤,像睡著了一般悄但。 火紅的嫁衣襯著肌膚如雪棠隐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天檐嚣,我揣著相機與錄音助泽,去河邊找鬼。 笑死嚎京,一個胖子當著我的面吹牛嗡贺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鞍帝,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼诫睬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了帕涌?” 一聲冷哼從身側響起摄凡,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤续徽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后亲澡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钦扭,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年床绪,在試婚紗的時候發(fā)現(xiàn)自己被綠了客情。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡癞己,死狀恐怖膀斋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤顶瞒,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布肾请,位于F島的核電站,受9級特大地震影響惰匙,放射性物質發(fā)生泄漏。R本人自食惡果不足惜铃将,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一项鬼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧劲阎,春花似錦绘盟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至锡垄,卻和暖如春沦零,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背货岭。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工路操, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人千贯。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓屯仗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親搔谴。 傳聞我的和親對象是個殘疾皇子魁袜,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

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