亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

深入理解JVM(一)——JVM內存模型

2019-11-10 17:16:50
字體:
來源:轉載
供稿:網友

http://blog.csdn.net/u010425776/article/details/51170118

java虛擬機(Java Virtual Machine=JVM)的內存空間分為五個部分,分別是: 1. 程序計數器 2. Java虛擬機棧 3. 本地方法棧 4. 堆 5. 方法區。

下面對這五個區域展開深入的介紹。 

1. 程序計數器

1.1. 什么是程序計數器?

程序計數器是一塊較小的內存空間,可以把它看作當前線程正在執行的字節碼的行號指示器。也就是說,程序計數器里面記錄的是當前線程正在執行的那一條字節碼指令的地址。 注:但是,如果當前線程正在執行的是一個本地方法,那么此時程序計數器為空。 

1.2. 程序計數器的作用

程序計數器有兩個作用:

字節碼解釋器通過改變程序計數器來依次讀取指令,從而實現代碼的流程控制,如:順序執行、選擇、循環、異常處理。在多線程的情況下,程序計數器用于記錄當前線程執行的位置,從而當線程被切換回來的時候能夠知道該線程上次運行到哪兒了。 

1.3. 程序計數器的特點

是一塊較小的存儲空間線程私有。每條線程都有一個程序計數器。是唯一一個不會出現OutOfMemoryError的內存區域。生命周期隨著線程的創建而創建,隨著線程的結束而死亡。 

2. Java虛擬機棧(JVM Stack)

2.1. 什么是Java虛擬機棧?

Java虛擬機棧是描述Java方法運行過程的內存模型。 Java虛擬機棧會為每一個即將運行的Java方法創建一塊叫做“棧幀”的區域,這塊區域用于存儲該方法在運行過程中所需要的一些信息,這些信息包括:

局部變量表 存放基本數據類型變量、引用類型的變量、returnAddress類型的變量。操作數棧動態鏈接方法出口信息等

當一個方法即將被運行時,Java虛擬機棧首先會在Java虛擬機棧中為該方法創建一塊“棧幀”,棧幀中包含局部變量表、操作數棧、動態鏈接、方法出口信息等。當方法在運行過程中需要創建局部變量時,就將局部變量的值存入棧幀的局部變量表中。 當這個方法執行完畢后,這個方法所對應的棧幀將會出棧,并釋放內存空間。

注意:人們常說,Java的內存空間分為“?!焙汀岸选?,棧中存放局部變量,堆中存放對象。 這句話不完全正確!這里的“堆”可以這么理解,但這里的“?!敝淮砹薐ava虛擬機棧中的局部變量表部分。真正的Java虛擬機棧是由一個個棧幀組成,而每個棧幀中都擁有:局部變量表、操作數棧、動態鏈接、方法出口信息。 

2.2. Java虛擬機棧的特點

局部變量表的創建是在方法被執行的時候,隨著棧幀的創建而創建。而且,局部變量表的大小在編譯時期就確定下來了,在創建的時候只需分配事先規定好的大小即可。此外,在方法運行的過程中局部變量表的大小是不會發生改變的。Java虛擬機棧會出現兩種異常:StackOverFlowError和OutOfMemoryError。 a) StackOverFlowError: 若Java虛擬機棧的內存大小不允許動態擴展,那么當線程請求棧的深度超過當前Java虛擬機棧的最大深度的時候,就拋出StackOverFlowError異常。 b) OutOfMemoryError: 若Java虛擬機棧的內存大小允許動態擴展,且當線程請求棧時內存用完了,無法再動態擴展了,此時拋出OutOfMemoryError異常。Java虛擬機棧也是線程私有的,每個線程都有各自的Java虛擬機棧,而且隨著線程的創建而創建,隨著線程的死亡而死亡。

注:StackOverFlowError和OutOfMemoryError的異同? StackOverFlowError表示當前線程申請的棧超過了事先定好的棧的最大深度,但內存空間可能還有很多。 而OutOfMemoryError是指當線程申請棧時發現棧已經滿了,而且內存也全都用光了。 

3. 本地方法棧

3.1. 什么是本地方法棧?

本地方法棧和Java虛擬機棧實現的功能類似,只不過本地方法區是本地方法運行的內存模型。

本地方法被執行的時候,在本地方法棧也會創建一個棧幀,用于存放該本地方法的局部變量表、操作數棧、動態鏈接、出口信息。

方法執行完畢后相應的棧幀也會出棧并釋放內存空間。

也會拋出StackOverFlowError和OutOfMemoryError異常。

4. 堆

4.1. 什么是堆?

堆是用來存放對象的內存空間。 幾乎所有的對象都存儲在堆中。 

4.2. 堆的特點

線程共享 整個Java虛擬機只有一個堆,所有的線程都訪問同一個堆。而程序計數器、Java虛擬機棧、本地方法棧都是一個線程對應一個的。在虛擬機啟動時創建垃圾回收的主要場所??梢赃M一步細分為:新生代、老年代。 新生代又可被分為:Eden、From Survior、To Survior。 不同的區域存放具有不同生命周期的對象。這樣可以根據不同的區域使用不同的垃圾回收算法,從而更具有針對性,從而更高效。堆的大小既可以固定也可以擴展,但主流的虛擬機堆的大小是可擴展的,因此當線程請求分配內存,但堆已滿,且內存已滿無法再擴展時,就拋出OutOfMemoryError。 

5. 方法區

5.1. 什么是方法區?

Java虛擬機規范中定義方法區是堆的一個邏輯部分。 方法區中存放已經被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等。 

5.2. 方法區的特點

線程共享 方法區是堆的一個邏輯部分,因此和堆一樣,都是線程共享的。整個虛擬機中只有一個方法區。永久代 方法區中的信息一般需要長期存在,而且它又是堆的邏輯分區,因此用堆的劃分方法,我們把方法區稱為老年代。內存回收效率低 方法區中的信息一般需要長期存在,回收一遍內存之后可能只有少量信息無效。 對方法區的內存回收的主要目標是:對常量池的回收 和 對類型的卸載。Java虛擬機規范對方法區的要求比較寬松。 和堆一樣,允許固定大小,也允許可擴展的大小,還允許不實現垃圾回收。 

5.3. 什么是運行時常量池?

方法區中存放三種數據:類信息、常量、靜態變量、即時編譯器編譯后的代碼。其中常量存儲在運行時常量池中。

我們一般在一個類中通過public static final來聲明一個常量。這個類被編譯后便生成Class文件,這個類的所有信息都存儲在這個class文件中。

當這個類被Java虛擬機加載后,class文件中的常量就存放在方法區的運行時常量池中。而且在運行期間,可以向常量池中添加新的常量。如:String類的intern()方法就能在運行期間向常量池中添加字符串常量。

當運行時常量池中的某些常量沒有被對象引用,同時也沒有被變量引用,那么就需要垃圾收集器回收。 

6. 直接內存

直接內存是除Java虛擬機之外的內存,但也有可能被Java使用。

在NIO中引入了一種基于通道和緩沖的IO方式。它可以通過調用本地方法直接分配Java虛擬機之外的內存,然后通過一個存儲在Java堆中的DirectByteBuffer對象直接操作該內存,而無需先將外面內存中的數據復制到堆中再操作,從而提升了數據操作的效率。

直接內存的大小不受Java虛擬機控制,但既然是內存,當內存不足時就會拋出OOM異常。 

綜上所述

Java虛擬機的內存模型中一共有兩個“”,分別是:Java虛擬機棧和本地方法棧。 兩個“?!钡墓δ茴?#20284;,都是方法運行過程的內存模型。并且兩個“棧”內部構造相同,都是線程私有。 只不過Java虛擬機棧描述的是Java方法運行過程的內存模型,而本地方法棧是描述Java本地方法運行過程的內存模型。Java虛擬機的內存模型中一共有兩個“”,一個是原本的堆,一個是方法區。方法區本質上是屬于堆的一個邏輯部分。堆中存放對象,方法區中存放類信息、常量、靜態變量、即時編譯器編譯的代碼。堆是Java虛擬機中最大的一塊內存區域,也是垃圾收集器主要的工作區域。程序計數器、Java虛擬機棧、本地方法棧是線程私有的,即每個線程都擁有各自的程序計數器、Java虛擬機棧、本地方法區。并且他們的生命周期和所屬的線程一樣。 而堆、方法區是線程共享的,在Java虛擬機中只有一個堆、一個方法棧。并在JVM啟動的時候就創建,JVM停止才銷毀。
上一篇:文章標題

下一篇:傳球游戲

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人日韩在线电影| 亚洲视频专区在线| 精品美女永久免费视频| 欧美夫妻性生活视频| 精品国产一区二区三区在线观看| 在线观看精品国产视频| 日本欧美一级片| 欧美在线视频免费播放| 96sao精品视频在线观看| 日本19禁啪啪免费观看www| 日韩一区二区在线视频| 永久免费毛片在线播放不卡| 国产欧美久久久久久| 欧美日韩免费在线| 国产专区欧美专区| 亚洲精品成人久久| 国产精品日韩一区| 亚洲精品国精品久久99热一| 在线电影欧美日韩一区二区私密| 一区二区三区 在线观看视| 日韩亚洲在线观看| 精品福利视频导航| 欧美中文在线字幕| 亚洲大尺度美女在线| 久久精品国产2020观看福利| 岛国av一区二区三区| 国产精品日韩在线观看| 欧美劲爆第一页| 国产视频精品免费播放| 久久人人爽亚洲精品天堂| 国产在线高清精品| 欧美日韩一区二区在线播放| 国模精品视频一区二区| 亚洲一区二区三区毛片| 欧美日韩亚洲激情| 亚洲理论在线a中文字幕| 日韩黄色高清视频| 国产精品视频999| 中日韩美女免费视频网址在线观看| 国产精品视频在线播放| 亚洲日本中文字幕免费在线不卡| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲一区中文字幕| 色偷偷av一区二区三区| 亚洲欧美日韩中文视频| 久久亚洲精品中文字幕冲田杏梨| 日韩在线免费观看视频| 最近2019中文字幕大全第二页| 亚洲一区二区中文字幕| 亚洲色图国产精品| 精品国产欧美一区二区三区成人| 欧美激情精品久久久久久蜜臀| 综合久久五月天| 国产精品一区二区久久国产| 97**国产露脸精品国产| 欧洲中文字幕国产精品| 欧美日韩国产一区二区三区| 久久精品成人欧美大片| 亚洲男人第一av网站| 久久久免费精品视频| 韩剧1988在线观看免费完整版| 91久久久久久久| 欧美最猛性xxxxx(亚洲精品)| 91视频国产一区| 国产在线播放91| 日本欧美一二三区| 一区二区三区 在线观看视| 欧美日韩国产中文精品字幕自在自线| 色久欧美在线视频观看| 精品呦交小u女在线| 国产精品大陆在线观看| 日韩在线视频免费观看高清中文| 欧美福利视频网站| 日本久久91av| 中文字幕亚洲二区| 欧美精品免费看| 91欧美激情另类亚洲| 奇米影视亚洲狠狠色| 91精品国产91久久久久福利| 亚洲美女喷白浆| 亚洲人成啪啪网站| 久久久久北条麻妃免费看| 国产综合在线看| 98精品在线视频| 欧美性生活大片免费观看网址| 国产午夜精品一区二区三区| 亚洲成年人在线播放| 国产精品手机播放| 亚洲精选一区二区| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲精品色婷婷福利天堂| 狠狠久久亚洲欧美专区| 在线国产精品播放| 日韩欧美成人网| 成人网中文字幕| 亚洲成人黄色在线| 久久久99久久精品女同性| 欧美裸体xxxxx| 91中文字幕在线观看| 91沈先生在线观看| 亚洲人成在线观| 在线日韩av观看| 欧美日韩激情美女| 欧美日韩国产一区在线| 久久久精品视频成人| 成人xvideos免费视频| 久久影视电视剧凤归四时歌| 欧美日韩电影在线观看| 欧美另类极品videosbest最新版本| 亚洲精品国产精品国自产观看浪潮| 国产精品久久久久久久久久久久久久| 欧美福利视频在线| 亚洲国产精品嫩草影院久久| 欧美国产精品日韩| 精品国产一区av| 中日韩美女免费视频网址在线观看| 欧美视频在线视频| 91在线视频一区| 国内精品美女av在线播放| 亚洲精品久久久久中文字幕二区| 国产精品青草久久久久福利99| 久久偷看各类女兵18女厕嘘嘘| 久久天天躁狠狠躁老女人| 国产xxx69麻豆国语对白| 久久韩剧网电视剧| 亚洲欧洲美洲在线综合| 91精品免费久久久久久久久| 成人黄色免费片| 国产高清在线不卡| 日韩www在线| 欧美成人免费在线视频| 亚洲精品日韩丝袜精品| 97国产suv精品一区二区62| 久久久久久久久久久久久久久久久久av| 久久国产天堂福利天堂| 国产精品入口夜色视频大尺度| 日韩欧美一区二区在线| 精品久久久国产精品999| 欧美精品久久久久久久久久| 久久精品国产成人| 国产深夜精品福利| 国产日韩欧美黄色| 欧美激情免费在线| 亚洲石原莉奈一区二区在线观看| 精品av在线播放| 91在线播放国产| 成人黄色午夜影院| 欧美性猛交xxxx偷拍洗澡| 欧美日韩国产91| 亚洲色图av在线| 福利二区91精品bt7086| 欧美人与性动交a欧美精品| 亚洲精品自拍第一页| 国语自产精品视频在线看| 精品一区二区三区四区| 国产美女搞久久| 亚洲天堂av电影| 日韩有码在线视频| 国产成人一区二区三区电影| 欧美性videos高清精品| 韩国日本不卡在线| 久久精品一本久久99精品| www.久久草.com| 日韩av成人在线观看|