jvm總結(jié)篇

內(nèi)存模型以及分區(qū),需要詳細(xì)到每個(gè)區(qū)放什么。

JVM 分為堆區(qū)和棧區(qū),還有方法區(qū),初始化的對(duì)象放在堆里面,引用放在棧里面,class類信息常量池(static常量和static變量)等放在方法區(qū)

  • 方法區(qū):主要是存儲(chǔ)類信息,常量池(static常量和static變量),編譯后的代碼(字節(jié)碼)等數(shù)據(jù)
  • 堆:初始化的對(duì)象,成員變量 (那種非static的變量),所有的對(duì)象實(shí)例和數(shù)組都要在堆上分配
  • 棧:棧的結(jié)構(gòu)是棧幀組成的,調(diào)用一個(gè)方法就壓入一幀,幀上面存儲(chǔ)局部變量表,操作數(shù)棧,方法出口等信息,局部變量表存放的是8大基礎(chǔ)類型加上一個(gè)應(yīng)用類型,所以還是一個(gè)指向地址的指針
  • 本地方法棧:主要為Native方法服務(wù)
  • 程序計(jì)數(shù)器:記錄當(dāng)前線程執(zhí)行的行號(hào)

堆里面的分區(qū):Eden,survival (from+ to),老年代,各自的特點(diǎn)。

堆里面分為新生代和老生代(java8取消了永久代,采用了Metaspace),新生代包含Eden+Survivor區(qū),survivor區(qū)里面分為from和to區(qū),內(nèi)存回收時(shí),如果用的是復(fù)制算法,從from復(fù)制到to,當(dāng)經(jīng)過(guò)一次或者多次GC之后,存活下來(lái)的對(duì)象會(huì)被移動(dòng)到老年區(qū),當(dāng)JVM內(nèi)存不夠用的時(shí)候,會(huì)觸發(fā)Full GC,清理JVM老年區(qū)
當(dāng)新生區(qū)滿了之后會(huì)觸發(fā)YGC,先把存活的對(duì)象放到其中一個(gè)Survice區(qū),然后進(jìn)行垃圾清理。因?yàn)槿绻麅H僅清理需要?jiǎng)h除的對(duì)象,這樣會(huì)導(dǎo)致內(nèi)存碎片,因此一般會(huì)把Eden 進(jìn)行完全的清理,然后整理內(nèi)存。那么下次GC 的時(shí)候,就會(huì)使用下一個(gè)Survive,這樣循環(huán)使用。如果有特別大的對(duì)象,新生代放不下,就會(huì)使用老年代的擔(dān)保,直接放到老年代里面。因?yàn)镴VM 認(rèn)為,一般大對(duì)象的存活時(shí)間一般比較久遠(yuǎn)。

對(duì)象存活判斷

引用計(jì)數(shù):每個(gè)對(duì)象有一個(gè)引用計(jì)數(shù)屬性,新增一個(gè)引用時(shí)計(jì)數(shù)加1,引用釋放時(shí)計(jì)數(shù)減1,計(jì)數(shù)為0時(shí)可以回收。此方法簡(jiǎn)單,無(wú)法解決對(duì)象相互循環(huán)引用的問(wèn)題。
可達(dá)性分析(Reachability Analysis):從GC Roots開始向下搜索,搜索所走過(guò)的路徑稱為引用鏈。當(dāng)一個(gè)對(duì)象到GC Roots沒(méi)有任何引用鏈相連時(shí),則證明此對(duì)象是不可用的。不可達(dá)對(duì)象。

在Java語(yǔ)言中,GC Roots包括:
虛擬機(jī)棧中引用的對(duì)象。
方法區(qū)中類靜態(tài)屬性實(shí)體引用的對(duì)象。
方法區(qū)中常量引用的對(duì)象。
本地方法棧中JNI引用的對(duì)象。

SafePoint是什么

比如GC的時(shí)候必須要等到Java線程都進(jìn)入到safepoint的時(shí)候VMThread才能開始執(zhí)行GC,

  1. 循環(huán)的末尾 (防止大循環(huán)的時(shí)候一直不進(jìn)入safepoint,而其他線程在等待它進(jìn)入safepoint)
  2. 方法返回前
  3. 調(diào)用方法的call之后
  4. 拋出異常的位置

GC的三種收集方法:標(biāo)記清除、標(biāo)記整理、復(fù)制算法的原理與特點(diǎn),分別用在什么地方,如果讓你優(yōu)化收集方法,有什么思路?

標(biāo)記:標(biāo)記完畢之后再清除,效率不高,會(huì)產(chǎn)生碎片
復(fù)制算法:分為8:1的Eden區(qū)和survivor區(qū),就是上面談到的YGC
標(biāo)記整理:標(biāo)記完畢之后,讓所有存活的對(duì)象向一端移動(dòng)

GC收集器有哪些?CMS收集器與G1收集器的特點(diǎn)。

串行收集器:串行收集器使用一個(gè)單獨(dú)的線程進(jìn)行收集,GC時(shí)服務(wù)有停頓時(shí)間
并行收集器:次要回收中使用多線程來(lái)執(zhí)行
CMS:基于“標(biāo)記—清除”算法實(shí)現(xiàn)的,經(jīng)過(guò)多次標(biāo)記才會(huì)被清除
G1:從整體來(lái)看是基于“標(biāo)記—整理”算法實(shí)現(xiàn)的收集器,從局部(兩個(gè)Region之間)上來(lái)看是基于“復(fù)制”算法實(shí)現(xiàn)的

Minor GC與Full GC分別在什么時(shí)候發(fā)生?

新生代內(nèi)存不夠用時(shí)候發(fā)生MGC也叫YGC,JVM內(nèi)存不夠的時(shí)候發(fā)生FGC

幾種常用的內(nèi)存調(diào)試工具:jmap、jstack、jconsole、jhat

stack可以看當(dāng)前棧的情況,jmap查看內(nèi)存,jhat 進(jìn)行dump堆的信息
mat(eclipse的也要了解一下)

g1 和 cms 區(qū)別,吞吐量?jī)?yōu)先和響應(yīng)優(yōu)先的垃圾收集器選擇

CMS是一種以最短停頓時(shí)間為目標(biāo)的收集器,響應(yīng)優(yōu)先選擇CMS,吞吐量高選擇G1

類加載的幾個(gè)過(guò)程

加載、驗(yàn)證、準(zhǔn)備、解析、初始化。然后是使用和卸載了
通過(guò)全限定名來(lái)加載生成class對(duì)象到內(nèi)存中,然后進(jìn)行驗(yàn)證這個(gè)class文件,包括文件格式校驗(yàn)、元數(shù)據(jù)驗(yàn)證,字節(jié)碼校驗(yàn)等。準(zhǔn)備是對(duì)這個(gè)對(duì)象分配內(nèi)存。解析是將符號(hào)引用轉(zhuǎn)化為直接引用(指針引用),初始化就是開始執(zhí)行構(gòu)造器的代碼

雙親委派模型

Bootstrap ClassLoader:啟動(dòng)類加載器,負(fù)責(zé)將 Java_Home/lib下面的類庫(kù)加載到內(nèi)存中。(比如rt.jar)
Extension ClassLoader:標(biāo)準(zhǔn)擴(kuò)展(Extension)類加載器,它負(fù)責(zé)將$Java_Home /lib/ext或者由系統(tǒng)變量 java.ext.dir指定位置中的類庫(kù)加載到內(nèi)存中。
ApplicationClassLoader:它負(fù)責(zé)將系統(tǒng)類路徑(CLASSPATH)中指定的類庫(kù)加載到內(nèi)存中。開發(fā)者可以直接使用系統(tǒng)類加載器
雙親委派模型是某個(gè)特定的類加載器在接到加載類的請(qǐng)求時(shí),首先將加載任務(wù)委托給父類加載器,依次遞歸,如果父類加載器可以完成類加載任務(wù),就成功返回;只有父類加載器無(wú)法完成此加載任務(wù)時(shí),才自己去加載。-----例如類java.lang.Object,它存在在rt.jar中,無(wú)論哪一個(gè)類加載器要加載這個(gè)類,最終都是委派給處于模型最頂端的Bootstrap ClassLoader進(jìn)行加載,因此Object類在程序的各種類加載器環(huán)境中都是同一個(gè)類。相反,如果沒(méi)有雙親委派模型而是由各個(gè)類加載器自行加載的話,如果用戶編寫了一個(gè)java.lang.Object的同名類并放在ClassPath中,那系統(tǒng)中將會(huì)出現(xiàn)多個(gè)不同的Object類,程序?qū)⒒靵y

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

少喝酒,少抽煙,少熬夜。多跑步,多喝茶,多看書。健康是最大的本錢,平安是福,對(duì)人對(duì)己,都是。學(xué)著感恩,學(xué)著理解,學(xué)著友善。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評(píng)論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,497評(píng)論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,305評(píng)論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評(píng)論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,727評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,193評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,411評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,945評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,777評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,978評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,216評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,657評(píng)論 3 391
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,960評(píng)論 2 373

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

  • 前言: 在遨游了一番 Java Web 的世界之后,發(fā)現(xiàn)了自己的一些缺失,所以就著一篇深度好文:知名互聯(lián)網(wǎng)公司校招...
    我沒(méi)有三顆心臟閱讀 10,417評(píng)論 15 121
  • 這篇文章是我之前翻閱了不少的書籍以及從網(wǎng)絡(luò)上收集的一些資料的整理,因此不免有一些不準(zhǔn)確的地方,同時(shí)不同JDK版本的...
    高廣超閱讀 15,650評(píng)論 3 83
  • 介紹JVM中7個(gè)區(qū)域,然后把每個(gè)區(qū)域可能造成內(nèi)存的溢出的情況說(shuō)明 程序計(jì)數(shù)器:看做當(dāng)前線程所執(zhí)行的字節(jié)碼行號(hào)指示器...
    jemmm閱讀 2,243評(píng)論 0 9
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,319評(píng)論 11 349
  • 大家晚上好,歡迎來(lái)到懂球帝中超三月最佳主教練的頒獎(jiǎng)現(xiàn)場(chǎng)。綜合三方投票,在新賽季率領(lǐng)魯能獲得兩連勝的馬加特當(dāng)選懂球帝...
    小小飛毛腿閱讀 208評(píng)論 0 0