jvm實戰(zhàn)二腮敌、垃圾回收

對象的創(chuàng)建

創(chuàng)建對象

init方法包括構造方法和初始化塊
創(chuàng)建對象的方式:new 序列化 克隆 反射

給對象分配內(nèi)存

1.指針碰撞

內(nèi)存分配

指針慢慢的往右邊移動,逐步分配石咬,如果多線程下揩悄,沒有做同步策略,會使一個區(qū)域被兩個線程同時使用鬼悠,導致指針碰撞删性。

2.空間列表

非連續(xù)內(nèi)存

需要一個列表保存:A:0x000001,即為專門記錄數(shù)據(jù)的列表為空間列表

線程安全問題

1.線程同步(基本不用)

2.本地線程分配緩存

本地線程

T1焕窝、T2蹬挺、T3三個代表線程,以及為每個線程分配的空間它掂,某個線程只會在其空間下分配內(nèi)存巴帮。

對象的結構

對象結構

object的hash值就是mark word中的哈希值。
類型指針表示方法區(qū)的類的原信息虐秋,對象其實以類信息為模版生成的一個實例榕茧。

垃圾回收

1.如何判斷對象為垃圾對象

引用計數(shù)法(不能解決對象相互應用)
可達性算法( 根集合:(1). 虛擬機棧(棧幀中的局部變量區(qū),也叫做局部變量表)中引用的對象客给。(2). 方法區(qū)中的類靜態(tài)屬性引用的對象用押。(3). 方法區(qū)中常量引用的對象。(4). 本地方法棧中JNI(Native方法)引用的對象 )

2.垃圾回收算法

復制算法(jvm新生代回收)

它開始時把堆分成 一個對象 面和多個空閑面靶剑, 程序從對象面為對象分配空間蜻拨,當對象滿了,基于copying算法的垃圾 收集就從根集合(GC Roots)中掃描活動對象桩引,并將每個 活動對象復制到空閑面(使得活動對象所占的內(nèi)存之間沒有空閑洞)缎讼,這樣空閑面變成了對象面,原來的對象面變成了空閑面坑匠,程序會在新的對象面中分配內(nèi)存血崭。

標記清除(jvm老年代回收)

標記-清除算法采用從根集合(GC Roots)進行掃描,對存活的對象進行標記,標記完畢后功氨,再掃描整個空間中未被標記的對象序苏,進行回收,標記-清除算法不需要進行對象的移動捷凄,只需對不存活的對象進行處理忱详,在存活對象比較多的情況下極為高效,但由于標記-清除算法直接回收不存活的對象跺涤,因此會造成內(nèi)存碎片匈睁。

標記壓縮(jvm老年代回收)

標記-整理算法采用標記-清除算法一樣的方式進行對象的標記,但在清除時不同桶错,在回收不存活的對象占用的空間后航唆,會將所有的存活對象往左端空閑空間移動,并更新對應的指針院刁。標記-整理算法是在標記-清除算法的基礎上糯钙,又進行了對象的移動,因此成本更高退腥,但是卻解決了內(nèi)存碎片的問題任岸。

分代收集算法
垃圾收集器

1.Serial收集器(新生代,復制算法)
單線程狡刘,在進行垃圾收集時必須暫停其他所有的工作線程享潜,基本不用了。

2.ParNew收集器(新生代嗅蔬,復制算法)
Serial收集器的多線程版本剑按,除了Serial收集器外,目前只有它能與CMS收集器配合工作澜术。

3.Parallel Scavenge收集器(“吞吐量優(yōu)先”收集器)(新生代艺蝴,復制算法)
CMS等收集器的關注點是盡可能縮短垃圾收集時用戶線程的停頓時間,而Parallel Scavenge收集器的目的則是達到一個可控制的吞吐量(Throughput)
-XX:MaxGCPauseMillis 控制最大垃圾收集停頓時間(新生代調(diào)的小瘪板,吞吐量跟著小吴趴,垃圾收集時間就短,停頓就形昱省)
-XX:GCTimeRatio 直接設置吞吐量大小,0<x<100 的整數(shù)厢拭,允許的最大GC時間=1/(1+x)
-XX:+UseAdaptiveSizePolicy 一個開關參數(shù)兰英,開啟GC自適應調(diào)節(jié)策略(GC Ergonomics),將內(nèi)存管理的調(diào)優(yōu)任務(新生代大小-Xmn、Eden與Survivor區(qū)的比例-XX:SurvivorRatio供鸠、晉升老年代對象年齡-XX: PretenureSizeThreshold 畦贸、等細節(jié)參數(shù))交給虛擬機完成。這是Parallel Scavenge收集器與ParNew收集器的一個重要區(qū)別,另一個是吞吐量

4.Serial Old收集器(老年代薄坏,標記整理算法)
在JDK1.5及之前的版本中與Parallel Scavenge收集器搭配使用趋厉;作為CMS 收集器的后備預案,在并發(fā)收集發(fā)生Concurrent Mode Failure的時候使用胶坠。

5.Parallel Old收集器(老年代君账,標記整理算法)
Parallel Scavenge收集器的老年代版本,多線程沈善。在注重吞吐量及CPU資源敏感的場合乡数,都可以優(yōu)先考慮Parallel Scavenge+Parallel Old收集器

6.CMS收集器(Concurrent Mark Sweep,標記清除)
它是一種以獲取最短回收停頓時間為目標的收集器闻牡。
優(yōu)點:并發(fā)收集净赴,低停頓。
互聯(lián)網(wǎng)站或B/S系統(tǒng)的服務端等應用尤其重視服務的響應速度罩润,希望系統(tǒng)停頓時間最短玖翅,以給用戶帶來較好的體驗,CMS收集器就非常符合這類應用的需求割以。
注意點:
1.對CPU資源非常敏感金度,CMS默認的回收線程數(shù): (CPU數(shù)量+3)/4
2.無法處理浮動垃圾(并發(fā)清理階段用戶程序運行產(chǎn)生的垃圾過了標記階段所以無法在本次收集中清理掉,稱為浮動垃圾)拳球,若老年代增長的不是很快审姓,可以適當調(diào)高參數(shù)-XX:CMSInitiatingOccupancyFraction 提高觸發(fā)百分比,但調(diào)得太高會容易導致“Concurrent Mode Failure”失敗祝峻。
3.基于“標記-清除”算法會產(chǎn)生大量空間碎片魔吐。提供開關參數(shù)-XX:+UseCMSCompactAtFullCollection 用于在“ 享受”完Full GC服務之后進行碎片整理過程,內(nèi)存整理的過程是無法并發(fā)的莱找。但是停頓時間會變長酬姆。
4.-XX:CMSFullGCsBeforeCompation 設置在執(zhí)行多少次不壓縮的Full GC后,跟來來一次帶壓縮的奥溺。

7.G1收集器(Garbage First辞色,標記整理)
與CMS相比有兩個顯著改進:
基于“標記-整理”算法實現(xiàn)收集器
非常精確地控制停頓
之前的收集器進行收集的范圍都是整個新生代或老年代,而G1將整個Java堆(包括新生代浮定、老年代)劃分為多個大小固定的獨立區(qū)域(Region)相满,并且跟蹤這些區(qū)域里面的垃圾堆積程度,在后臺維護一個優(yōu)先列表桦卒,每次根據(jù)允許的收集時間立美,優(yōu)先回收垃圾最多的區(qū)域(這就是Garbage First名稱的由來)。區(qū)域劃分方灾、有優(yōu)先級的區(qū)域回收建蹄,保證了G1收集器在有限的時間內(nèi)可以獲得最高的收集效率碌更。

3.內(nèi)存分配策略

優(yōu)先分配eden區(qū)
大對象直接分配到老年代 -XX:PretentenureSizeThreshold
長期存活的對象分配到老年代-XX:MaxTennuringThreshold=15
空間分配擔保-XX:HandlePromotionFailure(檢查老年代最大可用連續(xù)空間是否大于歷次晉升老年代對象的平均大小)

空間擔保和大對象區(qū)別洞慎?
空間擔保是先到eden分配失敗再到老年代痛单,大對象是直接到老年代
動態(tài)對象年齡-XX:TargetSurvivorRatio(如果在survivor空間中相同年齡大小的對象的總和大于survivor的一半,年齡大于或等于該年齡的對象可以直接進入老年代)

逃逸分析和棧上分配

1.對象有沒有出方法的范圍劲腿,如果出了就是逃逸
2.棧上分配是將沒有逃逸的對象進行棧的內(nèi)存分配

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旭绒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子谆棱,更是在濱河造成了極大的恐慌快压,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垃瞧,死亡現(xiàn)場離奇詭異蔫劣,居然都是意外死亡,警方通過查閱死者的電腦和手機个从,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門脉幢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嗦锐,你說我怎么就攤上這事嫌松。” “怎么了奕污?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵萎羔,是天一觀的道長。 經(jīng)常有香客問我碳默,道長贾陷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任嘱根,我火速辦了婚禮髓废,結果婚禮上,老公的妹妹穿的比我還像新娘该抒。我一直安慰自己慌洪,他們只是感情好,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布凑保。 她就那樣靜靜地躺著冈爹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪欧引。 梳的紋絲不亂的頭發(fā)上犯助,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音维咸,去河邊找鬼。 笑死,一個胖子當著我的面吹牛癌蓖,可吹牛的內(nèi)容都是我干的瞬哼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼租副,長吁一口氣:“原來是場噩夢啊……” “哼坐慰!你這毒婦竟也來了?” 一聲冷哼從身側響起用僧,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤结胀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后责循,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體糟港,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年院仿,在試婚紗的時候發(fā)現(xiàn)自己被綠了秸抚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡歹垫,死狀恐怖剥汤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情排惨,我是刑警寧澤吭敢,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站暮芭,受9級特大地震影響鹿驼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谴麦,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一蠢沿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧匾效,春花似錦舷蟀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至魔策,卻和暖如春匈子,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闯袒。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工虎敦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留游岳,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓其徙,卻偏偏與公主長得像胚迫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子唾那,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360