JVM相關

參考鏈接:
http://www.importnew.com/21470.html

雖然平時我們用的大多是Sun(現(xiàn)已被Oracle收購)JDK提供的JVM张惹,但是JVM本身是一個規(guī)范桃犬,所以可以有多種實現(xiàn)假消,除了Hotspot外犯助,還有諸如Oracle的JRockit耿导、IBM的J9也都是非常有名的JVM赎离。

主要組成:

類加載器子系統(tǒng)晦攒、運行時數據區(qū)(內存空間)闽撤、執(zhí)行引擎以及與本地方法接口等組成。

其中運行時數據區(qū)又由堆脯颜、方法區(qū)哟旗、Java棧、本地方法棧栋操、PC寄存器組成闸餐。堆與方法區(qū)是所有JAVA線程共享的。JAVA棧矾芙,本地方法棧舍沙,PC寄存器則由每個線程私有。

堆:
堆是JVM所管理的內存中最大的一塊剔宪,是被所有Java線程鎖共享的场勤,不是線程安全的,在JVM啟動時創(chuàng)建歼跟。
Sun JDK從1.2版本開始引入了分代管理的方式和媳。主要分為新生代、舊生代哈街。分代方式大大改善了垃圾收集的效率留瞳。

-Xms -Xmx
-XX:MinHeapFreeRatio
-XX:MaxHeapFreeRatio
對于運行系統(tǒng)而言,為避免在運行時頻繁調整Heap 的大小骚秦,通常將-Xms和-Xmx的值設成一樣她倘。

方法區(qū):
類型信息和類的靜態(tài)變量及常量池都存儲在方法區(qū)中璧微。常量池中存儲了如字符串、final變量值硬梁、類名和方法名常量前硫。在Sun JDK中,方法區(qū)對應了持久代(Permanent Generation)荧止,默認最小值為16MB屹电,最大值為64MB。大小可以通過參數來設置,可以通過-XX:PermSize指定初始值跃巡,-XX:MaxPermSize指定最大值危号。

JAVA棧:
Java棧的主要任務是存儲方法參數、局部變量素邪、中間運算結果外莲,并且提供部分其它模塊工作需要的數據。
Java椡秒總是與線程關聯(lián)在一起的偷线,每當創(chuàng)建一個線程,JVM就會為該線程創(chuàng)建對應的Java棧沽甥,在這個Java棧中又會包含多個棧幀(Stack Frame)声邦,這些棧幀是與每個方法關聯(lián)起來的,每運行一個方法就創(chuàng)建一個棧幀安接,每個棧幀會含有一些局部變量翔忽、操作棧和方法返回值等信息。每當一個方法執(zhí)行完成時盏檐,該棧幀就會彈出棧幀的元素作為這個方法的返回值歇式,并且清除這個棧幀,Java棧的棧頂的棧幀就是當前正在執(zhí)行的活動棧胡野,也就是當前正在執(zhí)行的方法材失,PC寄存器也會指向該地址。它分為三部分:局部變量區(qū)硫豆、操作數棧龙巨、幀數據區(qū)。

本地方法棧:
本地方法棧類似于Java棧熊响,主要存儲了本地方法調用的狀態(tài)旨别。區(qū)別不過是Java棧為JVM執(zhí)行Java方法服務,而本地方法棧為JVM執(zhí)行Native方法服務汗茄。本地方法棧也會拋出StackOverflowError和OutOfMemoryError異常秸弛。在Sun JDK中,本地方法棧和Java棧是同一個。

PC寄存器:
嚴格來說是一個數據結構递览,用于保存當前正在執(zhí)行的程序的內存地址叼屠,由于Java是支持多線程執(zhí)行的,所以程序執(zhí)行的軌跡不可能一直都是線性執(zhí)行绞铃。當有多個線程交叉執(zhí)行時镜雨,被中斷的線程的程序當前執(zhí)行到哪條內存地址必然要保存下來,以便用于被中斷的線程恢復執(zhí)行時再按照被中斷時的指令地址繼續(xù)執(zhí)行下去儿捧。為了線程切換后能恢復到正確的執(zhí)行位置荚坞,每個線程都需要有一個獨立的程序計數器,各個線程之間計數器互不影響纯命,獨立存儲西剥,我們稱這類內存區(qū)域為“線程私有”的內存,這在某種程度上有點類似于“ThreadLocal”痹栖,是線程安全的亿汞。

ClassLoader的分類#####

Bootstrap, Extension, System, User-Defined
類加載分為裝載、鏈接揪阿、初始化三步
JAVA 初始化 順序:
靜態(tài)變量疗我,static代碼塊,構造器

Java內存模型#####

所有的變量都存儲在主內存中南捂,每條線程還有自己的工作內存吴裤,線程的工作內存中保存了該線程使用到的變量到主內存副本拷貝,線程對變量的所有操作(讀取溺健、賦值)都必須在工作內存中進行麦牺,而不能直接讀寫主內存中的變量。不同線程之間無法直接訪問對方工作內存中的變量鞭缭,線程間變量值的傳遞均需要在主內存來完成剖膳,線程、主內存和工作內存的交互關系如下圖所示岭辣,和上圖很類似吱晒。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市沦童,隨后出現(xiàn)的幾起案子仑濒,更是在濱河造成了極大的恐慌,老刑警劉巖偷遗,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件墩瞳,死亡現(xiàn)場離奇詭異,居然都是意外死亡氏豌,警方通過查閱死者的電腦和手機喉酌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瞭吃,你說我怎么就攤上這事碌嘀。” “怎么了歪架?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵股冗,是天一觀的道長。 經常有香客問我和蚪,道長止状,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任攒霹,我火速辦了婚禮怯疤,結果婚禮上,老公的妹妹穿的比我還像新娘催束。我一直安慰自己集峦,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布抠刺。 她就那樣靜靜地躺著塔淤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪速妖。 梳的紋絲不亂的頭發(fā)上高蜂,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音罕容,去河邊找鬼备恤。 笑死,一個胖子當著我的面吹牛锦秒,可吹牛的內容都是我干的露泊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼脂崔,長吁一口氣:“原來是場噩夢啊……” “哼滤淳!你這毒婦竟也來了?” 一聲冷哼從身側響起砌左,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤脖咐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后汇歹,有當地人在樹林里發(fā)現(xiàn)了一具尸體屁擅,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年产弹,在試婚紗的時候發(fā)現(xiàn)自己被綠了派歌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弯囊。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖胶果,靈堂內的尸體忽然破棺而出匾嘱,到底是詐尸還是另有隱情,我是刑警寧澤早抠,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布霎烙,位于F島的核電站,受9級特大地震影響蕊连,放射性物質發(fā)生泄漏悬垃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一甘苍、第九天 我趴在偏房一處隱蔽的房頂上張望尝蠕。 院中可真熱鬧,春花似錦载庭、人聲如沸看彼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闲昭。三九已至罐寨,卻和暖如春靡挥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鸯绿。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工跋破, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瓶蝴。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓毒返,卻偏偏與公主長得像,于是被迫代替她去往敵國和親舷手。 傳聞我的和親對象是個殘疾皇子拧簸,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容