垃圾收集

判斷對象是否已死:

  1. 引用計數(shù)法(很難解決對象之間相互循環(huán)引用的問題)
  2. 可達(dá)性分析算法
  • 可作為GC Roots的對象包括:
    ① 虛擬機(jī)棧中引用的對象
    ② 方法去中類靜態(tài)屬性引用的對象
    ③ 方法區(qū)中常量引用的對象
    ④ 本地方法棧中JNI(Native方法)引用的對象

引用

  • 強(qiáng)引用
  • 軟引用
  • 弱引用
  • 虛引用

回收區(qū)域

1. 方法區(qū):回收性價比低

2. 堆(主要回收區(qū)域):

  • 新生代:Minor GC(復(fù)制算法)
  • 老年代:Major GC/Full GC(標(biāo)記—整理算法)
  • 永久代:廢棄常量和無用類
    • 無用類:
      ① 該類的所有實(shí)例已被回收
      ② 加載該類的ClassLoader已被回收
      ③ 該類對應(yīng)的java.lang.Class對象沒有在任何地方被引用雀费,無法在任何地方通過反射訪問該類

    • 內(nèi)存的永久保存區(qū)域,主要存放Class和Meta(元數(shù)據(jù))的信息,Class在被加載的時候被放入永久區(qū)域. 它和存放實(shí)例的區(qū)域不同,GC不會在主程序運(yùn)行期對永久區(qū)域進(jìn)行清理罐农。所以這也導(dǎo)致了永久代的區(qū)域會隨著加載的Class的增多而脹滿莫秆,最終拋出Out of Memory異常间雀。
      在Java8中,永久代已經(jīng)被移除镊屎,被一個稱為“元數(shù)據(jù)區(qū)”(元空間)的區(qū)域所取代惹挟。
      不過元空間與永久代之間最大的區(qū)別在于:元空間并不在虛擬機(jī)中,而是使用本地內(nèi)存缝驳。因此连锯,默認(rèn)情況下,元空間的大小僅受本地內(nèi)存限制用狱。類的元數(shù)據(jù)放入 native memory, 字符串池和類的靜態(tài)變量放入java堆中. 這樣可以加載多少類的元數(shù)據(jù)就不再由MaxPermSize控制, 而由系統(tǒng)的實(shí)際可用空間來控制.
      采用元空間而不用永久代的幾點(diǎn)原因:
      1运怖、為了解決永久代的Out of Memory問題,元數(shù)據(jù)和class對象存在永久代中夏伊,容易出現(xiàn)性能問題和內(nèi)存溢出摇展。
      2、類及方法的信息等比較難確定其大小溺忧,因此對于永久代的大小指定比較困難咏连,太小容易出現(xiàn)永久代溢出,太大則容易導(dǎo)致老年代溢出(因?yàn)槎芽臻g有限鲁森,此消彼長)捻勉。
      3、永久代會為 GC 帶來不必要的復(fù)雜度刀森,并且回收效率偏低踱启。
      4、Oracle 可能會將HotSpot 與 JRockit 合二為一。

垃圾收集算法

1. 標(biāo)記—清除算法(最基本)

2. 復(fù)制算法(新生代)

  • 新生代分為:Eden和兩個Survivor大小比例是8:1埠偿,回收時透罢,將Eden和survivor中還存活的對象一次性的復(fù)制到另一個Survivor空間中 ,同時把這些對象的年齡+1(默認(rèn)情況下15歲就直接送到老年代了)冠蒋,最后清理掉Eden和剛才用過的Survivor空間羽圃。
    • 如果Surviovr的空間不夠,需要依賴其他內(nèi)存(老年代)進(jìn)行分配擔(dān)保(虛擬機(jī)回檢查老年代最大可用的連續(xù)空間是否大于新生代所有對象的總空間)抖剿,這些對象直接通過分配擔(dān)保機(jī)制進(jìn)入老年代朽寞。(正常的需要Age達(dá)到15才可以進(jìn)入老年代),如果擔(dān)保失敗斩郎,且不允許脑融,則老年代需要進(jìn)行一次Full GC。

3. 標(biāo)記—整理算法(老年代)

垃圾收集器

IMG_20180627_194825_1.jpg

內(nèi)存分配

  • 對象優(yōu)先在Eden分配
  • 大對象直接進(jìn)入老年代(大對象指很長的字符串以及數(shù)組)
  • 長期存活的對象進(jìn)入老年代
    • 虛擬機(jī)給每個對象一個對象年齡(Age)計數(shù)器缩宜。對象每經(jīng)過一次Minor GC Age就加一肘迎。(默認(rèn)是15歲就會進(jìn)入老年代)
    • 如果Survivor中相同年齡的所有對象的總和大于空間的一半,則年齡大于或等于該年齡的對象都可以直接進(jìn)入老年代锻煌,無須等到要求的年齡妓布。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宋梧,隨后出現(xiàn)的幾起案子匣沼,更是在濱河造成了極大的恐慌,老刑警劉巖捂龄,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肛著,死亡現(xiàn)場離奇詭異,居然都是意外死亡跺讯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進(jìn)店門殉农,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刀脏,“玉大人,你說我怎么就攤上這事超凳∮郏” “怎么了?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵轮傍,是天一觀的道長暂雹。 經(jīng)常有香客問我,道長创夜,這世上最難降的妖魔是什么杭跪? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任凯肋,我火速辦了婚禮症虑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己众眨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布饭望。 她就那樣靜靜地躺著悔政,像睡著了一般。 火紅的嫁衣襯著肌膚如雪桥言。 梳的紋絲不亂的頭發(fā)上萌踱,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天,我揣著相機(jī)與錄音号阿,去河邊找鬼并鸵。 笑死,一個胖子當(dāng)著我的面吹牛倦西,可吹牛的內(nèi)容都是我干的能真。 我是一名探鬼主播,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼扰柠,長吁一口氣:“原來是場噩夢啊……” “哼粉铐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起卤档,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤蝙泼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后劝枣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汤踏,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年舔腾,在試婚紗的時候發(fā)現(xiàn)自己被綠了溪胶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡稳诚,死狀恐怖哗脖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扳还,我是刑警寧澤才避,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站氨距,受9級特大地震影響桑逝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜俏让,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一楞遏、第九天 我趴在偏房一處隱蔽的房頂上張望茬暇。 院中可真熱鬧,春花似錦橱健、人聲如沸而钞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽臼节。三九已至,卻和暖如春珊皿,著一層夾襖步出監(jiān)牢的瞬間网缝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工蟋定, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留粉臊,地道東北人。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓驶兜,卻偏偏與公主長得像扼仲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子抄淑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評論 2 349

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