1. 程式人生 > >深入理解Java虛擬機器讀書筆記-1

深入理解Java虛擬機器讀書筆記-1

Java 虛擬機器記憶體結構
JVM 在執行過程中會把記憶體劃分為多個不同的資料區域,有的區域是所有執行緒共享的,如方法區和堆,還有的區域是執行緒隔離的,例如虛擬機器棧、本地方法棧和程式計數器。

1、程式計數器(Progress Counter Register)
可以看做是當前執行緒所執行的位元組碼的行號指示器,在 JVM 的概念模型(並非具體實現)中,位元組碼直譯器工作時就是通過改變這個計數器的值來獲取下一條需要執行的位元組碼指令,分支、迴圈、跳轉、異常處理和執行緒恢復等基礎功能都要依賴這個計數器完成。
每個執行緒的計數器互不影響,獨立儲存。
如果執行緒正在執行的是 Java 方法,這個計數器記錄的是正在執行的 JVM 位元組碼指令的地址,如果正在執行的是 native 方法,那麼這個計數器的值則為空。
這個記憶體區域是JVM中唯一一個在JVM規範中沒有規定任何OutOfMemoryError情況的區域。

2、Java 虛擬機器棧(Java Virtual Machine Stacks)
虛擬機器棧也是每個執行緒私有的記憶體區域,它描述的是 Java 方法執行的記憶體模型,每個方法在執行的時候都會生成一個棧幀用來儲存區域性變量表、運算元棧、動態連結、方法出口等資訊。每一個方法從呼叫直到結束的過程,就對應著一個棧幀在虛擬機器棧中的一個入棧和出棧的過程。
比較關鍵的是區域性變量表部分,它存放了編譯期間可知的各種基本資料型別和物件引用型別(非物件本身)。
區域性變量表所需的記憶體空間在編譯期間就完成分配,在進入一個方法時,該方法需要的棧空間大小是確定的,在方法執行期間不會去改變區域性變量表的大小。
這個區域有兩種異常狀況:當現場請求的棧深度大於 JVM 所允許的深度,將丟擲StackOverflowError

異常。如果虛擬機器棧可以動態擴充套件但是在擴充套件時無法申請到足夠的記憶體,將丟擲OutOfMemoryError異常。

3、本地方法棧
與虛擬機器棧類似,不過執行的 native 方法。具體的虛擬機器可以自由實現,有的虛擬機器(例如 HotSpot)直接將本地方法棧和虛擬機器棧合二為一。

4、堆

5、方法區

6、執行時常量池

7、直接記憶體

相關推薦

深入理解Java虛擬機器讀書筆記1----Java記憶體區域與HotSpot虛擬機器物件

一 Java記憶體區域與HotSpot虛擬機器物件 1 Java技術體系、JDK、JRE?     Java技術體系包括:         · Java程式設計語言;   

深入理解Java虛擬機器讀書筆記(1):記憶體管理重要概念

深入理解Java虛擬機器讀書筆記(1):記憶體管理重要概念 說到Java記憶體管理,不得不先貼一張非常經典的圖,如下所示: 這些模組有些是執行緒私有的,有的則是執行緒共享的。下面一一對這些模組進行介紹: 一、程式計數器 程式計數器一塊比較小的記憶體空間,可以看做當前

深入理解Java虛擬機器讀書筆記-1

Java 虛擬機器記憶體結構 JVM 在執行過程中會把記憶體劃分為多個不同的資料區域,有的區域是所有執行緒共享的,如方法區和堆,還有的區域是執行緒隔離的,例如虛擬機器棧、本地方法棧和程式計數器。 1、程式計數器(Progress Counter Regist

深入理解Java虛擬機器讀書筆記2----垃圾收集器與記憶體分配策略

二 垃圾收集器與記憶體分配策略 1 JVM中哪些記憶體需要回收?     JVM垃圾回收主要關注的是Java堆和方法區這兩個區域;而程式計數器、虛擬機器棧、本地方法棧這3個區域隨執行緒而生,隨執行緒而滅,隨著方法結束或者執行緒結束記憶體自然

深入理解Java虛擬機器讀書筆記7----晚期(執行期)優化

七 晚期(執行期)優化 1 即時編譯器(JIT編譯器)     ---當虛擬機發現某個方法或程式碼塊的執行特別頻繁時,就會把這些程式碼認定為“熱點程式碼”,包括被多次呼叫的方法和被多次執行的迴圈體。     ---為了提高熱點程式碼的執行效率

深入理解Java虛擬機器讀書筆記8----Java記憶體模型與執行緒

八 Java記憶體模型與執行緒   1 Java記憶體模型     ---主要目標:定義程式中各個變數的訪問規則,即在虛擬機器中將變數儲存到記憶體和從記憶體中取出變數這樣的底層細節。     ---此處的變數和Java中的變

深入理解Java虛擬機器讀書筆記9----執行緒完全與鎖優化

九 執行緒完全與鎖優化   1 Java語言中的執行緒完全         ---執行緒安全:當多個執行緒訪問一個物件時,如果不用考慮這些執行緒在執行時環境下的排程和交替執行,也不需要進行額外的同步,或者在呼叫方進行任何其

深入理解Java虛擬機器讀書筆記(3): JVM引數型別分類

深入理解Java虛擬機器讀書筆記(3): JVM引數型別分類 JVM有很多引數,一般可以分為三大類:標準引數、X引數和XX引數 標準引數 所謂標準引數,即一般化引數,往往是固定不變的,比如以下引數: -help -version 顯式虛擬機器型別 當前

深入理解Java虛擬機器讀書筆記(2): 深入理解HotSpot虛擬機器物件

深入理解Java虛擬機器讀書筆記(2): 深入理解HotSpot虛擬機器物件 為了理解虛擬機器中資料的細節,比如如何建立、如何佈局以及如何訪問,必須具體到某一虛擬機器和某一個記憶體區域。此處深入探討HotSpot虛擬機器在Java堆中物件分配、佈局和訪問的全過程。 一、物件的建立

深入理解JAVA虛擬機器讀書筆記----虛擬機器類載入機制

概述 虛擬機器類載入機制:虛擬機器把描述類的資料從class檔案載入到記憶體,並對資料進行校驗、轉換解析和初始化,最終形成可以被虛擬機器直接使用的Java型別。 不像C語言,寫好程式碼後,編譯-》連結-》執行;Java語言裡,型別的載入和連線過程是在程式執行

深入理解Java虛擬機器 讀書筆記——垃圾收集器與記憶體分配策略

第3章 垃圾收集器與記憶體分配策略 關於Java中的引用型別 強引用(Strong Reference):Object obj = new Object(); 這樣的常規引用,只要引用還在,就永遠不會回收物件。 軟引用(Soft Reference):

深入理解Java虛擬機器讀書筆記java編譯期和執行期優化

編譯期優化解析和填充符號表1.詞法、 語法分析詞法分析是將原始碼的字元流轉變為標記(Token)集合,單個字元是程式編寫過程的最小元素,而標記則是編譯過程的最小元素,關鍵字、 變數名、 字面量、 運算子

深入理解java虛擬機器讀書筆記(推薦指數:☆☆☆☆☆)

深入理解Java虛擬機器讀書筆記 Java虛擬機器的發展史(略) SunClassic/Exact VM 只能用純解釋方式來執行Java程式碼,如果使用JIT編譯器,就必須使用外掛。但是如果外掛了JIT編譯器,JIT編譯器完全接管了虛擬機器

深入理解JAVA虛擬機器讀書筆記:HotSpot虛擬機器物件探祕

HotSpot虛擬機器物件探祕 1、物件的建立 虛擬機器遇到一條new指令時,首先將去檢查這個指令的引數是否能在常量池中定位這個類的符號引用,並且檢查這個符號引用代表的類是否已經被載入、解析和初始化過。如果沒有,那必須先執行響應的類載入過程。(類載入會在後面的章節給出)。

深入理解Java虛擬讀書筆記---運行時數據區域

強制 申請 異常 模型 分配內存 類信息 gist 運行時 過程 運行時數據區域 1.程序計數器 程序計數器(Program Counter Register)是一塊較小的內存空間,它可以看作是當前線程所執行的字節碼的行號指示器。字節碼解釋器工作時就是通過改變這

深入理解JVM虛擬機器讀書筆記【第十章】早期(編譯期)優化

10.1 概述 10.2 Javac編譯器 10.2.1 Javac的原始碼與除錯 10.2.2 解析與填充符號表 10.2.3 註解處理器 10.2.4 語義分析與

深入理解JVM虛擬機器讀書筆記【第九章】類載入及執行子系統的案例與實戰

9.1 概述 9.2 案例分析 9.2.1 Tomcat:正統的類載入器架構 9.2.2 OSGI:靈活的類載入器架構 9.2.3 位元組碼生成技術與動態代理

深入理解JVM虛擬機器讀書筆記【第八章】虛擬機器位元組碼執行引擎

8.1 概述 8.2 執行時棧幀結構 8.2.1 區域性變量表 8.2.2 運算元棧 8.2.3 動態連線 8.2.4 方法返回地址

深入理解JVM虛擬機器讀書筆記【第七章】虛擬機器類載入機制

7.1 概述 7.2 類載入的時機 7.3 類載入的過程 7.3.1 載入 7.3.2 驗證 1.檔案格式驗證 2.元資料驗證 3.位元組碼驗證

深入理解java虛擬機器學習筆記(一)

Java記憶體區域模型 Java虛擬機器在執行Java程式的過程中,會把它所管理的記憶體區域劃分為若干個不同的資料區域,這些區域一般被稱為執行時資料區(Runtime Data Area),也就是我們常說的JVM記憶體。 執行時資料區通常包括以下這幾個部分: 程式計數器(Program Counte