JVM&GC相關(guān)學(xué)習(xí)筆記

為什么先說JVM堆?
  JVM的堆是Java對(duì)象的活動(dòng)空間览爵,程序中的類的對(duì)象從中分配空間置鼻,其存儲(chǔ)著正在運(yùn)行著的應(yīng)用程序用到的所有對(duì)象。這些對(duì)象的建立方式就是那些new一類的操作蜓竹,當(dāng)對(duì)象無用后箕母,是GC來負(fù)責(zé)這個(gè)無用的對(duì)象(地球人都知道)储藐。

GC的工作目的很明確:
  在堆中,找到已經(jīng)無用的對(duì)象嘶是,并把這些對(duì)象占用的空間收回使其可以重新利用.大多數(shù)垃圾回收的 算法思路都是一致的:把所有對(duì)象組成一個(gè)集合钙勃,或可以理解為樹狀結(jié)構(gòu),從樹根開始找聂喇,只要可以找到的都是活動(dòng)對(duì)象辖源,如果找不到,這個(gè)對(duì)象就是凋零的昨日黃花希太,應(yīng)該被回收了克饶。

JAVA 垃圾回收器的主要任務(wù)是:
  1、分配內(nèi)存
  2誊辉、確保被引用對(duì)象的內(nèi)存不被錯(cuò)誤地回收
  3矾湃、回收不再被引用的對(duì)象的內(nèi)存空間

GC算法

垃圾搜集的算法主要有三種,分別是標(biāo)記-清除算法堕澄、復(fù)制算法邀跃、標(biāo)記-整理算法
  1、標(biāo)記-清除算法
這種垃圾回收一次回收分為兩個(gè)階段:標(biāo)記蛙紫、清除坞嘀。首先標(biāo)記所有需要回收的對(duì)象,在標(biāo)記完成后回收所有被標(biāo)記的對(duì)象惊来。這種回收算法會(huì)產(chǎn)生大量不連續(xù)的內(nèi)存碎片丽涩,當(dāng)要頻繁分配一個(gè)大對(duì)象時(shí),jvm在新生代中找不到足夠大的連續(xù)的內(nèi)存塊裁蚁,會(huì)導(dǎo)致jvm頻繁進(jìn)行內(nèi)存回收(目前有機(jī)制矢渊,對(duì)大對(duì)象,直接分配到老年代中)
  2枉证、 復(fù)制算法
這種算法會(huì)將內(nèi)存劃分為兩個(gè)相等的塊矮男,每次只使用其中一塊。當(dāng)這塊內(nèi)存不夠使用時(shí)室谚,就將還存活的對(duì)象復(fù)制到另一塊內(nèi)存中毡鉴,然后把這塊內(nèi)存一次清理掉。這樣做的效率比較高秒赤,也避免了內(nèi)存碎片猪瞬。但是這樣內(nèi)存的可使用空間減半,是個(gè)不小的損失入篮。
  3陈瘦、 標(biāo)記-整理算法
標(biāo)記/整理算法與標(biāo)記/清除算法非常相似,它也是分為兩個(gè)階段:標(biāo)記和整理潮售。
(1)標(biāo)記:它的第一個(gè)階段與標(biāo)記/清除算法是一模一樣的痊项,均是遍歷GC Roots锅风,然后將存活的對(duì)象標(biāo)記。
(2)整理:移動(dòng)所有存活的對(duì)象鞍泉,且按照內(nèi)存地址次序依次排列皱埠,然后將末端內(nèi)存地址以后的內(nèi)存全部回收。因此咖驮,第二階段才稱為整理階段边器。
缺點(diǎn)就是效率也不高,不僅要標(biāo)記所有存活對(duì)象游沿,還要整理所有存活對(duì)象的引用地址饰抒。從效率上來說肮砾,標(biāo)記/整理算法要低于復(fù)制算法

GC的兩種判定方法:引用計(jì)數(shù) 引用鏈诀黍。
引用計(jì)數(shù) 給對(duì)象添加一個(gè)引用計(jì)數(shù)器,每過一個(gè)引用計(jì)數(shù)器值就+1仗处,少一個(gè)引用就-1眯勾。當(dāng)它的引用變?yōu)?時(shí),該對(duì)象就不能再被使用婆誓。它的實(shí)現(xiàn)簡(jiǎn)單吃环,但是不能解決互相循環(huán)引用的問題。

內(nèi)存泄漏和內(nèi)存溢出的差別
  內(nèi)存泄露是指分配出去的內(nèi)存沒有被回收回來洋幻,由于失去了對(duì)該內(nèi)存區(qū)域的控制郁轻,因而造成了資源的浪費(fèi)。Java中一般不會(huì)產(chǎn)生內(nèi)存泄露文留,因?yàn)橛欣厥掌髯詣?dòng)回收垃圾好唯,但這也不絕對(duì),當(dāng)我們new了對(duì)象燥翅,并保存了其引用骑篙,但是后面一直沒用它,而垃圾回收器又不會(huì)去回收它森书,這邊會(huì)造成內(nèi)存泄露靶端,
內(nèi)存溢出是指程序所需要的內(nèi)存超出了系統(tǒng)所能分配的內(nèi)存(包括動(dòng)態(tài)擴(kuò)展)的上限。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凛膏,一起剝皮案震驚了整個(gè)濱河市杨名,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌猖毫,老刑警劉巖镣煮,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鄙麦,居然都是意外死亡典唇,警方通過查閱死者的電腦和手機(jī)镊折,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來介衔,“玉大人恨胚,你說我怎么就攤上這事⊙卓В” “怎么了赃泡?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)乘盼。 經(jīng)常有香客問我升熊,道長(zhǎng),這世上最難降的妖魔是什么绸栅? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任级野,我火速辦了婚禮,結(jié)果婚禮上粹胯,老公的妹妹穿的比我還像新娘蓖柔。我一直安慰自己,他們只是感情好风纠,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布况鸣。 她就那樣靜靜地躺著,像睡著了一般竹观。 火紅的嫁衣襯著肌膚如雪镐捧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天臭增,我揣著相機(jī)與錄音懂酱,去河邊找鬼。 笑死速址,一個(gè)胖子當(dāng)著我的面吹牛玩焰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播芍锚,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼昔园,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了并炮?” 一聲冷哼從身側(cè)響起默刚,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逃魄,沒想到半個(gè)月后荤西,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年邪锌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了勉躺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡觅丰,死狀恐怖饵溅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情妇萄,我是刑警寧澤蜕企,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站冠句,受9級(jí)特大地震影響轻掩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜懦底,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一唇牧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧基茵,春花似錦奋构、人聲如沸壳影。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宴咧。三九已至根灯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掺栅,已是汗流浹背烙肺。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氧卧,地道東北人桃笙。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像沙绝,于是被迫代替她去往敵國(guó)和親搏明。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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

  • 一. 垃圾回收的意義 在C++中闪檬,對(duì)象所占的內(nèi)存在程序結(jié)束運(yùn)行之前一直被占用星著,在明確釋放之前不能分配給其它對(duì)...
    Stan_Z閱讀 1,920評(píng)論 0 25
  • 1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虛擬機(jī)(JVM)垃圾回收器提供...
    簡(jiǎn)欲明心閱讀 89,392評(píng)論 17 311
  • JVM架構(gòu) 當(dāng)一個(gè)程序啟動(dòng)之前粗悯,它的class會(huì)被類裝載器裝入方法區(qū)(Permanent區(qū))虚循,執(zhí)行引擎讀取方法區(qū)的...
    cocohaifang閱讀 1,646評(píng)論 0 7
  • 原文閱讀 前言 這段時(shí)間懈怠了,罪過! 最近看到有同事也開始用上了微信公眾號(hào)寫博客了横缔,挺好的~給他們點(diǎn)贊铺遂,這博客我...
    碼農(nóng)戲碼閱讀 5,948評(píng)論 2 31
  • 很多人的日常是這樣的: 早晨醒來第一件事先看看手機(jī)娃循; 走在路上低著頭看著手機(jī); 坐車途中刷一會(huì)微博或朋友圈斗蒋; 上課...
    Y阿曉閱讀 345評(píng)論 1 0