2019-04-26 JVM 學(xué)習(xí)筆記

一爵嗅、 JVM 簡單結(jié)構(gòu)圖


JVM基本結(jié)構(gòu)

1.1 類加載子系統(tǒng)與方法區(qū)

? ??????類加載子系統(tǒng)負(fù)責(zé)從文件系統(tǒng)或網(wǎng)絡(luò)中加載Class 信息吃媒,加載的類信息存放于一塊稱作方法區(qū)的內(nèi)存空間烙如。除了類信息外涂籽,方法區(qū)中可能還會存放運行時常量池信息苹祟,包括字符字面量和數(shù)字常量

1.2? JAVA堆

????????Java 堆在虛擬機(jī)啟動的時候建立,它是 Java 程序最主要的內(nèi)存工作區(qū)域。幾乎所有的 JAVA 對象實例 都存放在 JAVA 堆中树枫。堆空間十分所有線程共享的直焙,這是一塊與 JAVA 應(yīng)用密切相關(guān)的內(nèi)存空間。

1.3? 直接內(nèi)存

????????Java 的 NIO 庫允許 Java 程序使用直接內(nèi)存砂轻,直接內(nèi)存是在 Java 堆外的奔誓,直接向系統(tǒng)申請的內(nèi)存空間。通常訪問直接內(nèi)存的速度會優(yōu)于 Java 堆搔涝。 因此處于性能考慮厨喂,讀寫頻繁的場合會考慮使用直接內(nèi)存。由于直接內(nèi)存在 Java 堆 外庄呈,因此它的大小不會直接受限于 Xmx 指定的最大堆大小蜕煌,但是系統(tǒng)內(nèi)存是有限的,Java 堆和直接內(nèi)存的總和依然受限于操作系統(tǒng)能給出的最大內(nèi)存诬留。

1.4? 垃圾回收系統(tǒng)

????????垃圾回收系統(tǒng)是 Java 虛擬機(jī)的重要組成部分斜纪,垃圾回收器可以對方法區(qū)、Java 堆和直接內(nèi)存進(jìn)行回收文兑。其中盒刚,Java 堆是垃圾收集器的工作重點。和 C / C++ 不同绿贞,Java 中所有對象空間釋放都是隱式的伪冰,也就是說,Java 中沒有類似 free() 或者 delete() 這樣的函數(shù)釋放指定內(nèi)存區(qū)域樟蠕。對于不再使用的垃圾對象贮聂,垃圾回收系統(tǒng)會在后臺默默的工作,默默查找寨辩、標(biāo)識并釋放垃圾對象吓懈,完成包括 Java 堆 、方法區(qū)和直接內(nèi)存中的全自動化管理

1.5? Java 棧

????????每一個 Java 虛擬機(jī)線程都有一個私有的 Java 棧靡狞,一個線程的 Java 棧在線程創(chuàng)建的時候被創(chuàng)建耻警,Java 棧中保存著幀信息,Java 棧中保存著局部變量甸怕、方法參數(shù)甘穿,同時和 Java 方法的調(diào)用、返回密切相關(guān)梢杭。

1.6? 本地方法棧

????????本地方法棧和 Java 棧非常相似温兼,最大的不同在于 java 棧用于方法的調(diào)用,而本地方法棧則用于本地方法的調(diào)用武契,作為對 Java 虛擬機(jī)的重要拓展募判,Java 虛擬機(jī)允許 Java 直接調(diào)用本地方法(通常使用 C 編寫)

1.7? PC寄存器

????????PC(Program Counter)寄存器也是每一個線程私有的空間荡含,Java 虛擬機(jī)會為每一個 java 線程創(chuàng)建 PC 寄存器。在任意時刻届垫,一個 Java 線程總是在執(zhí)行一個方法释液,這個正在被執(zhí)行的方法稱為當(dāng)前方法。如果當(dāng)前方法不是本地方法装处,PC 寄存器就會指向當(dāng)前正在被執(zhí)行的指令误债,如果當(dāng)前方法是本地方法,那么 PC 寄存器的值就是undefined

1.8? 執(zhí)行引擎

????????執(zhí)行引擎是 java 虛擬機(jī)最核心的組件之一妄迁,它負(fù)責(zé)執(zhí)行虛擬機(jī)的字節(jié)碼寝蹈,現(xiàn)代虛擬機(jī)為了提高執(zhí)行效率,會使用即時編譯(just in time)技術(shù)將方法編譯成機(jī)器碼后再執(zhí)行判族。

????????Java HostSpot Client VM(-client),為在客戶端環(huán)境中減少啟動時間兒優(yōu)化的執(zhí)行引擎项戴;本地應(yīng)用開發(fā)使用形帮。(如:eclipse)

????????Java HostSpot Server Vm(-server),為在服務(wù)器環(huán)境中最大化程序執(zhí)行速度而設(shè)計的執(zhí)行引擎周叮。應(yīng)用在服務(wù)端程序(如:Tomcat)

? ?Java HostSpot Client 模式和 Server 模式的區(qū)別

????????當(dāng)虛擬機(jī)運行在 -Client 模式的時候辩撑,使用的是一個代號 C1 的輕量級編譯器,而 -server 模式啟動的虛擬機(jī)采用相對重量級仿耽,代號為 C2 的編譯器合冀。C2 比 C1 編譯器編譯的相對徹底,服務(wù)起來之后性能更高项贺。

????????JDK 安裝目錄/jre/lib/(x86君躺、i386、amd32开缎、amd64)/jvm.cfg

????????文件中的內(nèi)容棕叫,-server 和-client 哪一個配置在上,執(zhí)行引擎就是哪一個奕删。如果是 JDK1.5 版本且是 64 位系統(tǒng)應(yīng)用時俺泣,-client 無效。

????--64 位系統(tǒng)內(nèi)容

????????-server KNOWN

????????-client IGNORE

????--32 位系統(tǒng)內(nèi)容

????????-server KNOWN

????????-client KNOWN

注意:在部分 JDK1.6 版本和后續(xù)的 JDK 版本(64 位系統(tǒng))中完残,-client 參數(shù)已經(jīng)不起作用 了伏钠,Server 模式成為唯一。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谨设,一起剝皮案震驚了整個濱河市熟掂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扎拣,老刑警劉巖打掘,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件华畏,死亡現(xiàn)場離奇詭異,居然都是意外死亡尊蚁,警方通過查閱死者的電腦和手機(jī)亡笑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來横朋,“玉大人仑乌,你說我怎么就攤上這事∏俣В” “怎么了晰甚?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長决帖。 經(jīng)常有香客問我厕九,道長,這世上最難降的妖魔是什么地回? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任扁远,我火速辦了婚禮,結(jié)果婚禮上刻像,老公的妹妹穿的比我還像新娘畅买。我一直安慰自己,他們只是感情好细睡,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布谷羞。 她就那樣靜靜地躺著,像睡著了一般溜徙。 火紅的嫁衣襯著肌膚如雪湃缎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天蠢壹,我揣著相機(jī)與錄音雁歌,去河邊找鬼。 笑死知残,一個胖子當(dāng)著我的面吹牛靠瞎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播求妹,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼乏盐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了制恍?” 一聲冷哼從身側(cè)響起父能,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎净神,沒想到半個月后何吝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溉委,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年爱榕,在試婚紗的時候發(fā)現(xiàn)自己被綠了瓣喊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡黔酥,死狀恐怖藻三,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跪者,我是刑警寧澤棵帽,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站渣玲,受9級特大地震影響逗概,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜忘衍,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一逾苫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧淑履,春花似錦隶垮、人聲如沸藻雪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勉耀。三九已至指煎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間便斥,已是汗流浹背至壤。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留枢纠,地道東北人像街。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像晋渺,于是被迫代替她去往敵國和親镰绎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351

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

  • 這篇文章是我之前翻閱了不少的書籍以及從網(wǎng)絡(luò)上收集的一些資料的整理木西,因此不免有一些不準(zhǔn)確的地方畴栖,同時不同JDK版本的...
    高廣超閱讀 15,572評論 3 83
  • 《深入理解Java虛擬機(jī)》筆記_第一遍 先取看完這本書(JVM)后必須掌握的部分。 第一部分 走近 Java 從傳...
    xiaogmail閱讀 5,070評論 1 34
  • 內(nèi)存溢出和內(nèi)存泄漏的區(qū)別 內(nèi)存溢出:out of memory八千,是指程序在申請內(nèi)存時吗讶,沒有足夠的內(nèi)存空間供其使用燎猛,...
    Aimerwhy閱讀 732評論 0 1
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,093評論 1 32
  • Java 虛擬機(jī)屏蔽了與具體操作系統(tǒng)平臺相關(guān)的信息,使得 Java 語言編譯程序只需生成在 Java 虛擬機(jī)上運行...
    尋夢的尕柳閱讀 861評論 0 11