java 內存回收機制

1.引言

在Java中,它的內存管理包括兩方面:內存分配(創(chuàng)建Java對象的時候)和內存回收侥涵,這兩方面工作都是由JVM自動完成的沼撕,降低了Java程序員的學習難度,避免了像C/C++直接操作內存的危險芜飘。但是务豺,也正因為內存管理完全由JVM負責,所以也使Java很多程序員不再關心內存分配嗦明,導致很多程序低效笼沥,耗內存。因此就有了Java程序員到最后應該去了解JVM,才能寫出更高效奔浅,充分利用有限的內存的程序馆纳。

2. 正題

內存泄露導致的原因:對象已經沒有被應用程序使用,但是垃圾回收器沒辦法移除它們乘凸,因為還在被引用著厕诡。 還有一種說法是:沒有直接或間接被Gcroot集合引用 的對象都被稱作垃圾內存。其中能作為Gcroot對象的有:
(1). 虛擬機棧(棧幀中的局部變量區(qū)营勤,也叫做局部變量表)中引用的對象灵嫌。
(2). 方法區(qū)中的類靜態(tài)屬性引用的對象。
(3). 方法區(qū)中常量引用的對象葛作。
(4). 本地方法棧中JNI(Native方法)引用的對象寿羞。

Paste_Image.png

2.1 算法分析-引用計數法

堆中每個對象都有一塊內存用來保存該對象被引用的次數。當任何其他變量賦值為這個對象的引用時赂蠢,計數加1 绪穆,(a=b ,則b引用的對象實例計數器+1)但當一個對象實例的某個引用超過了生命周期或者被設置為一個新值時虱岂,對象實例的引用計數器減1玖院,任何引用計數器為0 的對象實例可以當做垃圾收集。

優(yōu)點:
1)實時性 無需等到內存不夠的時候第岖,才開始回收难菌,運行時根據對象的計數器是否為0,就可以直接回收蔑滓。
2)在垃圾回收過程中郊酒,應用無需掛起。如果申請內存時键袱,內存不足燎窘,則立刻報outofmember 錯誤.
3)更新對象的計數器時,只是影響到該對象蹄咖,不會掃描全部對象

缺點:
1)每次對象被引用時褐健,都需要去更新計數器,有一點時間開銷澜汤。另外無法解決循環(huán)引用問題蚜迅。例如:

Paste_Image.png

要想清除:必須先調用a.b=null;b.a=null;

2.2標記-清除(Mark-Sweep)算法

首先標記出所有等待被回收的對象。然后統(tǒng)一清除银亲。

Paste_Image.png

缺點:產生的內存碎片太多慢叨,效率低下。

2.3 復制(Copying)算法

1)新生對象被分配到A塊中未使用的內存當中务蝠。當A塊的內存用完了拍谐, 把A塊的存活對象復制到B塊。
2)清理A塊所有對象。
4)新生對象被分配到B塊中未使用的內存當中轩拨。當B塊的內存用完了践瓷, 把B塊的存活對象復制到A塊。
4)清理B塊所有對象亡蓉。
循環(huán)1晕翠。

缺點:內存縮小為了原來的一半,這樣代價太高了

Paste_Image.png

2.4 優(yōu)化的復制算法

1)Eden+S0可分配新生對象砍濒;
2)對Eden+S0進行垃圾收集淋肾,存活對象復制到S1。清理Eden+S0爸邢。一次新生代GC結束樊卓。
3)Eden+S1可分配新生對象;
4)對Eden+S1進行垃圾收集杠河,存活對象復制到S0碌尔。清理Eden+S1。二次新生代GC結束券敌。
循環(huán)1唾戚。


Paste_Image.png

2.5 標記-整理(Mark-Compact)算法

復制算法在對象存活率較高的場景下要進行大量的復制操作,效率很低待诅。萬一對象100%存活叹坦,那么需要有額外的空間進行分配擔保。老年代都是不易被回收的對象咱士,對象存活率高立由,因此一般不能直接選用復制算法轧钓。根據老年代的特點序厉,有人提出了另外一種標記-整理算法,過程與標記-清除算法一樣毕箍,不過不是直接對可回收對象進行清理弛房,而是讓所有存活對象都向一端移動,然后直接清理掉邊界以外的內存而柑。標記-整理算法的工作過程如圖:

Paste_Image.png

2.6 分代回收算法

Paste_Image.png

分別是:年輕代文捶,年老代,和永久代媒咳。
年輕代:“標記-復制算法”粹排,eden:survivo:survivo=8:1:1
老年代:"標記-整理(Mark-Compact)算法",將大部分的依舊在引用的對象,整理涩澡,減少代碼碎片顽耳。
永久代
用于存放靜態(tài)文件,如今Java類、方法等射富。持久代對垃圾回收沒有顯著影響膝迎,但是有些應用可能動態(tài)生成或
者調用一些class,例如Hibernate等胰耗,在這種時候需要設置一個比較大的持久代空間來存放這些運行過程中新
增的類限次。持久代大小通過-XX:MaxPermSize=進行設置。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末柴灯,一起剝皮案震驚了整個濱河市卖漫,隨后出現的幾起案子,更是在濱河造成了極大的恐慌赠群,老刑警劉巖懊亡,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異乎串,居然都是意外死亡店枣,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門叹誉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸯两,“玉大人,你說我怎么就攤上這事长豁【疲” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵匠襟,是天一觀的道長钝侠。 經常有香客問我,道長酸舍,這世上最難降的妖魔是什么帅韧? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任满哪,我火速辦了婚禮颁虐,結果婚禮上,老公的妹妹穿的比我還像新娘日川。我一直安慰自己淮阐,他們只是感情好叮阅,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泣特,像睡著了一般浩姥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上状您,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天勒叠,我揣著相機與錄音镀裤,去河邊找鬼。 笑死缴饭,一個胖子當著我的面吹牛暑劝,可吹牛的內容都是我干的。 我是一名探鬼主播颗搂,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼担猛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了丢氢?” 一聲冷哼從身側響起傅联,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疚察,沒想到半個月后蒸走,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡貌嫡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年比驻,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岛抄。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡别惦,死狀恐怖,靈堂內的尸體忽然破棺而出夫椭,到底是詐尸還是另有隱情掸掸,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布蹭秋,位于F島的核電站扰付,受9級特大地震影響,放射性物質發(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

推薦閱讀更多精彩內容

  • 在Java中派撕,它的內存管理包括兩方面:內存分配(創(chuàng)建Java對象的時候)和內存回收婉弹,這兩方面工作都是由JVM自動完...
    juexin閱讀 285評論 0 1
  • 1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虛擬機(JVM)垃圾回收器提供...
    簡欲明心閱讀 89,448評論 17 311
  • 如果你想要從太空觀察地球终吼,衛(wèi)星技術就能夠做到這一點镀赌。圖中的海洋流是衛(wèi)星地圖展現的,紫色和粉紅色的漩渦代表更暖的洋流...
    allever閱讀 1,391評論 0 8
  • 來自: Android夢想特工隊作者: Aaron主頁: http://www.wxtlife.com/原...
    技術特工隊閱讀 4,361評論 0 28
  • 窗外陽光明媚际跪,正是萬物生長的季節(jié)商佛。距離教室不遠的階梯教室正在施工,斷斷續(xù)續(xù)的轟隆隆聲讓正在授課邢老師很是尷尬姆打,不得...
    花無缺853閱讀 518評論 0 0