GC原理浩考,性能調(diào)優(yōu)

GC原理被盈,性能調(diào)優(yōu)

通過IDEA 運(yùn)行JAVA代碼,java代碼執(zhí)行過程

  1. 編譯源代碼
  2. 編譯java文件生成字節(jié)碼文件
  3. JVM 中的類加載器袜瞬,加載字節(jié)碼文件
  4. JVM 中的執(zhí)行引擎找到入口方法main(),執(zhí)行其中的方法

JVM 垃圾回收

JVM回收原理身堡,把對象分為年青代、年老代汞扎,持久代,對不同生命周期的對象使用不同的算法景鼠。(基于對對象生命周期分析)
通常我們說的JVM內(nèi)存回收總是在指堆內(nèi)存回收痹扇,確實(shí)只有堆中的內(nèi)容是動態(tài)生氣分配的鲫构,所以以上對象的年青代和年老代都是指的JVM的Heap空間, 而持久代則是之前提到的MethodArea芬迄,不屬于Head禀梳。

  1. GC 的基本原理:講內(nèi)存中不再被使用的對象進(jìn)行回收,GC中用于回收的方法稱為收集器肠骆,由于GC需要消耗一些資源和時(shí)間算途,Java在對對象的生命周期特征進(jìn)行分析后,按照新生代蚀腿,舊生代的方式來對對象進(jìn)行收集嘴瓤,以盡可能的縮短GC對應(yīng)用造成的暫停
    1)對新生代的對象的收集稱為minor GC;
    2)對舊生代的對象的收集稱為Full GC莉钙;
    3)程序中主動調(diào)用System.gc()強(qiáng)制執(zhí)行的GC為Full GC
    不同的對象引用類型廓脆,GC會采用不同的方法進(jìn)行回收,JVM對象的引用分為了四種類型:
  2. 強(qiáng)引用:默認(rèn)情況下磁玉,對象采用的均為強(qiáng)引用(這個(gè)對象的實(shí)例沒有其他對象引用停忿,GC時(shí)才會被銷毀回收)
  3. 軟引用:軟引用是Java中提供的一種比較合適與緩存場景的應(yīng)用(只有在內(nèi)存不夠的用的情況下才會被回收)
  4. 虛引用:由于虛引用只是用來得知對象是否被GC

JVM的對象分配規(guī)則

對象優(yōu)先分配在Eden區(qū)【使用空間】,如果Eden區(qū)沒有足夠的空間時(shí)席赂,虛擬機(jī)執(zhí)行一次Minor GC【垃圾回收】。
大對象直接進(jìn)入老年代(大對象是指需要大量連續(xù)內(nèi)存空間的對象)时迫。這樣做的目的是避免在Eden區(qū)和兩個(gè)Survivor區(qū)之間發(fā)生大量的內(nèi)存拷貝(新生代采用復(fù)制算法收集內(nèi)存)颅停。
長期存活的對象進(jìn)入老年代。虛擬機(jī)為每個(gè)對象定義了一個(gè)年齡計(jì)數(shù)器掠拳,如果對象經(jīng)過了1次Minor GC(年輕代收集)那么對象會進(jìn)入Survivor區(qū)癞揉,之后每經(jīng)過一次Minor GC那么對象的年齡加1,直到達(dá)到閥值對象進(jìn)入老年區(qū)。
動態(tài)判斷對象的年齡烧董。如果Survivor區(qū)中相同年齡的所有對象大小的總和大于Survivor空間的一半毁靶,年齡大于或等于該年齡的對象可以直接進(jìn)入老年代。
空間分配擔(dān)保逊移。每次進(jìn)行Minor GC時(shí)预吆,JVM會計(jì)算Survivor區(qū)移至老年區(qū)的對象的平均大小,如果這個(gè)值大于老年區(qū)的剩余值大小則進(jìn)行一次Full GC胳泉,如果小于檢查HandlePromotionFailure設(shè)置拐叉,如果true則只進(jìn)行Monitor GC,如果false則進(jìn)行Full GC。

簡要概括如下

  • 對象先在Eden區(qū)扇商,Eden區(qū)空間不夠時(shí)進(jìn)行新生代GC
  • 大對象和長期存活的對象進(jìn)入老年代
  • JVM為每個(gè)對象設(shè)置了計(jì)數(shù)器凤瘦,經(jīng)過1次新生代GC則進(jìn)入幸存者區(qū),達(dá)到年齡閾值則進(jìn)入老年區(qū)
  • 幸存者區(qū)中年齡一致的對象所占內(nèi)存大小案铺,大于幸存者區(qū)空間一半時(shí)蔬芥,則大于等于此年齡的對象全部進(jìn)入老年代
  • 老年代GC通常伴隨著一次新生代GC,但不絕對

YOUNG(年輕代)

年輕代分為三個(gè)區(qū)控汉,一個(gè)Eden區(qū)笔诵,兩個(gè)Survivor區(qū)。大部分對象在Eden去中生成姑子。當(dāng)Eden區(qū)滿時(shí)乎婿,還存活的對象將被復(fù)制到Survivor區(qū),當(dāng)這個(gè)Survivor區(qū)也滿的時(shí)候街佑,從第一個(gè)Survivor的兩個(gè)區(qū)復(fù)制過來的并且此時(shí)還存活的對象谢翎,將被復(fù)制到年老區(qū)(Survivor的兩個(gè)區(qū)是對稱的,沒有先后關(guān)系沐旨,所以同一個(gè)區(qū)可能同時(shí)存在從Eden復(fù)制過來的對象森逮,和從前一個(gè)Survivor復(fù)制過來的對象,而復(fù)制到年老區(qū)的只有從第一個(gè)Survivor去過去的對象希俩,并且Survivor區(qū)總有一個(gè)是空的)吊宋。

Tenured 年老代

年老代存放從年輕代存活的對象,一般來說年老代存放的都是生命周期較長的對象颜武。

持久代Perm

用于存放靜態(tài)文件璃搜,如今Java類,方法等鳞上,持久代對垃圾回收沒有明顯的影響这吻,但是有些應(yīng)用可能動態(tài)生成活調(diào)用一些class,列如Hibernate等篙议,在這種時(shí)候需要設(shè)置一個(gè)比較大的持久代空間來存放這些運(yùn)行過程新增的類唾糯。持久代大小通過-XX:MaxPermSize 進(jìn)行設(shè)置怠硼。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市移怯,隨后出現(xiàn)的幾起案子香璃,更是在濱河造成了極大的恐慌,老刑警劉巖舟误,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件葡秒,死亡現(xiàn)場離奇詭異,居然都是意外死亡嵌溢,警方通過查閱死者的電腦和手機(jī)眯牧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赖草,“玉大人学少,你說我怎么就攤上這事⊙砥铮” “怎么了版确?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長乎折。 經(jīng)常有香客問我阀坏,道長,這世上最難降的妖魔是什么笆檀? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮盒至,結(jié)果婚禮上酗洒,老公的妹妹穿的比我還像新娘。我一直安慰自己枷遂,他們只是感情好樱衷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著酒唉,像睡著了一般矩桂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上痪伦,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天侄榴,我揣著相機(jī)與錄音,去河邊找鬼网沾。 笑死癞蚕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辉哥。 我是一名探鬼主播桦山,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼攒射,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了恒水?” 一聲冷哼從身側(cè)響起会放,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钉凌,沒想到半個(gè)月后咧最,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡甩骏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年窗市,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饮笛。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咨察,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出福青,到底是詐尸還是另有隱情摄狱,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布无午,位于F島的核電站媒役,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏宪迟。R本人自食惡果不足惜酣衷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望次泽。 院中可真熱鬧穿仪,春花似錦、人聲如沸意荤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽玖像。三九已至紫谷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捐寥,已是汗流浹背笤昨。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留握恳,地道東北人咬腋。 一個(gè)月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像睡互,于是被迫代替她去往敵國和親根竿。 傳聞我的和親對象是個(gè)殘疾皇子陵像,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354

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

  • 正文 本文的內(nèi)容主要如下: GC 基礎(chǔ)原理,涉及調(diào)優(yōu)目標(biāo)寇壳,GC 事件分類醒颖、JVM 內(nèi)存分配策略、GC 日志分析等 ...
    feelar007閱讀 344評論 0 0
  • 內(nèi)容主要如下: GC 基礎(chǔ)原理壳炎,涉及調(diào)優(yōu)目標(biāo)泞歉,GC 事件分類、JVM 內(nèi)存分配策略匿辩、GC 日志分析等腰耙。 CMS 原...
    猿小將閱讀 448評論 0 0
  • 概述 本文介紹GC基礎(chǔ)原理和理論,GC調(diào)優(yōu)方法思路和方法铲球,基于Hotspot jdk1.8挺庞,學(xué)習(xí)之后將了解如何對生...
    caison閱讀 1,433評論 1 2
  • 轉(zhuǎn)發(fā)于:https://mp.weixin.qq.com/s/sa0j5gQ08luTicTpZW_Cyg“ 本文...
    無色的葉閱讀 577評論 0 7
  • 本文介紹 GC 基礎(chǔ)原理和理論,GC 調(diào)優(yōu)方法思路和方法稼病,基于 Hotspot jdk1.8选侨,學(xué)習(xí)之后你將了解如何...
    AnyL8023閱讀 291評論 0 1