国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

Java Runtime Data Area

2019-11-14 23:13:20
字體:
來源:轉載
供稿:網友
java Runtime Data Area

java虛擬機在執行java程序的過程中會把它所管理的內存劃分為若干個區域,這些區域都有各自的用途,以及創建和銷毀的時間,有的區域隨著虛擬機進程的啟動而存在,有些區域則依賴著用戶的線程的啟動和結束而建立和銷毀。根據java 虛擬機規范的規定,java虛擬機所管理的內存將會包括以下幾個運行時數據區域。

如下圖所示:

java虛擬機運行時數據區可以分為:

程序計數器 方法區 運行時常量池 本地方法棧java虛擬機棧。其中程序計數器、java棧、本地方法棧,是根據線程的啟動而創建的;而堆、方法區、運行時常量池是隨著jvm的啟動而創建的,其中的數據是可以被各個線程所共享的。

(圖片摘自:http://286.VEvb.com/blog/1928180,個人覺得比《深入理解java虛擬機》上的那張圖要清晰)

1,程序計數器

  程序計數器是一塊較小的內存空間,它可以看作是當前線程所執行的字節碼的行號指示器。由于java虛擬機的多線程是通過線程輪流切換并分配處理器執行時間的方式來實現的,在任何一個確定的時刻,一個處理器都會只執行一條線程中的指令。因此為了線程切換后都能恢復正確的執行位置,每個線程都有一個獨立的程序計數器。如果線程正在執行的是一個java方法,這個計數器記錄的就是正在執行的虛擬機字節碼指令的地址;如果正在執行的是native方法,這個計數器值則為空。

2,java虛擬機棧

  java虛擬機棧也是線程私有的,它的生命周期與線程相同的。虛擬機棧描述的是java方法執行的內存模型:每個方法在執行的同時都會創建一個棧幀(stack frame)。用于存儲局部變量表、操作數棧、動態鏈接、方法出口等信息。每一個方法從調用直到執行完成的過程,就對應著一個棧帖在虛擬機中入棧到出棧的過程。java虛擬機棧用來存儲棧幀,而棧幀持有局部變量和部分結果以及參與方法的調用與返回。

幀用于存儲局部變量表、操作數棧、動態鏈接、方法出口和投遞異常等信息。當方法調用結束結束時,幀才會被銷毀;幀由創建幀的線程的java棧分配空間,每個幀都擁有自己的本地變量數組、操作數棧、以及運行常量池的引用

3,本地方法棧

  本地方法棧(native method stack)與虛擬機發揮的作用是非常類似的,它們之間的區別不過是虛擬機棧執行的是java方法,而本地方法棧則為java虛擬機所使用到native方法服務。

4,java堆

  對于大多數應用來說,java(堆)是java虛擬機所管理內存中的最大的一塊。java 堆是被所有線程共享的一塊內存區域,在虛擬機啟動時創建。它的主要目的就是為了創建對象實例,向乎所有對像的實例都是在這里分配。

5,方法區

  方法區與java堆一樣,是各個線程共享的內存區域,它用于存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據。

運行時常量池是方法區的一部分.Class文件中除了有類的版本、字段、方法、接口等描述信息外,還有一項信息就是常量池用于存儲編譯期生成的各種字面量以及符號引用。

---恢復內容結束---


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长岭县| 抚松县| 永德县| 正镶白旗| 河北省| 农安县| 浦县| 乐陵市| 湘阴县| 启东市| 外汇| 丽水市| 邢台县| 教育| 磐安县| 班戈县| 石楼县| 云阳县| 阿克| 黄大仙区| 翼城县| 宝清县| 厦门市| 高淳县| 辛集市| 长白| 伽师县| 资讯 | 海淀区| 行唐县| 兴安盟| 谢通门县| 津南区| 绥化市| 新干县| 固始县| 黔西| 白河县| 安塞县| 扎赉特旗| 宁明县|