深入拆解java虛擬機器-筆記整理
java程式碼為何在虛擬機器中執行及如何執行
1. 為何在虛擬機器中執行
- 1-1.提供了可移植性;
- 1-2.java程式碼被編譯成java位元組碼後,可以在不同平臺上的java虛擬機器上執行;
- 1-3.提供了一個程式碼託管的環境,代替我們處理部分沉長而且容易出錯的事物,例如提供記憶體管理、垃圾回收、編譯時動態校驗等功能。
2. 如何執行
- 2-1.java虛擬機器在執行的時候講記憶體區域劃分為5個部分,分別為方法區,堆,PC暫存器,java方法棧和本地方法棧,java程式編譯而成的.class檔案需要先載入到方法區,方能在java虛擬機器中執行。
後續再補充
相關推薦
深入拆解java虛擬機器-筆記整理
java程式碼為何在虛擬機器中執行及如何執行 1. 為何在虛擬機器中執行 1-1.提供了可移植性; 1-2.java程式碼被編譯成java位元組碼後,可以在不同平臺上的java虛擬機器上執行; 1-3.提供了一個程式碼託管的環境,代替我們處理部分沉長而且容易出錯的
深入理解Java虛擬機器筆記---class類檔案魔數,版本,常量池
魔數 每個class檔案的頭4個位元組稱為魔數(Magic Number),其值為:0xCAFEBABE,它的唯一作用是用於確定這個檔案是否為一個能被虛擬機器接受的class檔案。使用魔數而不是副檔名來進行識別主要是基於安全的考慮,因為檔案的副檔名可以隨意地被改動。 版本號
深入理解Java虛擬機器筆記——Java記憶體模型與併發程式設計
當程式在執行過程中,會將運算需要的資料從主存複製一份到CPU的快取記憶體中,那麼CPU進行計算時就可以直接從它的快取記憶體讀取資料和向其中寫入資料,當運算結束後,再將告訴快取中的資料重新整理到主存中。 如果一個變數在多個CPU中都存在快取,那麼就存在快取一致性
深入理解Java虛擬機器筆記——虛擬機器類載入機制
虛擬機器類載入機制 類載入機制:虛擬機器把描述類的資料從class檔案載入到記憶體,並對資料進行校驗、 轉換解析和初始化,最終形成可以被虛擬機器直接使用的Java型別。 在Java中,型別的載入和連線過程都是在程式執行期間完成的。 類載入時機(類從載入到虛擬
【深入理解 Java 虛擬機器筆記】虛擬機器位元組碼執行引擎
7.虛擬機器位元組碼執行引擎 執行引擎是 Java 虛擬機器最核心的組成部分之一。在 Java 虛擬機器規範中制定了虛擬機器位元組碼執行引擎的概念模型,這個概念模型成為各種虛擬機器執行引擎的統一外觀(Facade)。不同的虛擬機器實現,執行引擎可能會有解釋執行和編譯執行兩種,有可能兩
深入理解Java虛擬機器筆記--物件的記憶體佈局和訪問定位
物件的記憶體佈局 在HotSpot虛擬機器中,物件在記憶體中儲存的佈局可以分為3塊區域:物件頭(Header)、例項資料(Instance Data)和對齊填充(Padding)。 HotSpot虛擬機器物件頭包括兩部分資訊:第一
深入理解Java虛擬機器筆記--記憶體分配規則
記憶體分配規則 通過在Client模式(也就是採用Serial/SerialOld收集器)下講解幾條最普遍的記憶體分配規則。 物件優先在Eden區分配:在大多數情況下,物件都在Eden區進行分配。當Eden區沒有足夠的空間進行分配時將發起一次M
【深入理解 Java 虛擬機器筆記】虛擬機器效能監控與故障處理工具
3.虛擬機器效能監控與故障處理工具 定位問題時,知識和經驗是關鍵基礎、資料(執行日誌、異常堆疊、GC日誌、執行緒快照、堆轉儲快照)是依據、工具是運用知識處理資料的手段。 思維導圖 JDK的命令列工具 jps: 虛擬機器程序狀況工具 jps(JVM Proce
【深入理解 Java 虛擬機器筆記】類檔案結構
5.類檔案結構 由於最近十年內虛擬機器以及大量建立在虛擬機器之上的程式語言如雨後春筍般出現並蓬勃發展,將我們編寫的程式編譯成二進位制本地機器碼(Native Code)已不再是唯一的選擇,越來越多的程式語言選擇了作業系統和機器指令集無關的、平臺中立的格式作為程式
深入理解Java虛擬機器筆記(一)
內容主要參考《深入理解Java虛擬機器(第2版)》 Java和C++之間有一堵由記憶體動態分配和垃圾收集技術所圍成的“高牆”,牆外面的人想進去,牆裡面的人想出來。 一 JVM執行時資料區 執行時資料區結構如下圖: 1 程式計數器:記憶體較小,執行緒執行的位元組碼的行號指
深入理解Java虛擬機器筆記---volatile變數的特殊規則
當一個變數定義成volatile之後,它將具備兩種特性:第一是保證此變數對所有執行緒的可見性,這裡的“可見性”是指當一條執行緒修改了這個變數的值,新值對於其它執行緒是可以立即得知的,變數值線上程間傳遞均需要通過主記憶體來完成,如:執行緒A修改一個普通變數的值,然後向主
讀鄭雨迪《深入拆解Java虛擬機器》 -- 第一講 Java程式碼是怎麼執行的
Java程式碼有很多執行方式。 在開發工具中執行 雙擊jar檔案執行 在命令列中執行 在網頁中執行 當然,上述執行方式都離不開JRE, 也就是Java執行時環境。 JRE僅包含Java程式的必須元件,包括Java虛擬機器以及Java核心類庫等。 而我們Java
讀鄭雨迪《深入拆解Java虛擬機器》 -- 第八講 JVM是如何實現invokedynamic的
以前,我們賽馬 只能由馬參加,但是對於一些年輕人裡流行的鴨子型別(duck typing),只要跑起來像馬的,它就是一隻馬,也可以參加賽馬比賽。 class Horse { public void race() { System.out.prin
讀鄭雨迪《深入拆解Java虛擬機器》 -- 第二講 Java的基本型別
Java不僅是一門面向物件的語言,它還引進8種基本資料型別來支援數值運算。Java這麼做的原因多半是工程上的考慮,因為使用基本資料型別可以在記憶體使用和運算效率兩方面獲得顯著提升。 今天,我們來了解一下基本資料型別在Java中的實現 public class Fo
讀鄭雨迪《深入拆解Java虛擬機器》 -- 第三講 Java虛擬機器是如何載入Java類的
我們把Java虛擬機器載入Java類比作蓋房子。那麼我們蓋房子,首先需要請建築師出個方案,然後去市政部門報備、驗證,通過後才可以開始蓋房子。蓋好房子還要裝修,之後才能住人。 從class檔案到記憶體中的類,按先後順序需要經過載入、連結以及初始化三大步驟。其中,連結過程中
讀鄭雨迪《深入拆解Java虛擬機器》 -- 第七講 JVM是如何實現反射的
反射是Java語言中一個相當重要的特性,它允許正在執行的Java程式觀測,甚至是修改程式的動態行為。 舉例來說,我們可以通過Class物件列舉該類中所有的方法,我們還可以通過Method.setAccessible(位於java.lang.reflect包,該方法繼承自
讀鄭雨迪《深入拆解Java虛擬機器》 -- 第六講 JVM是如何處理異常的
眾所周知,異常處理的兩大組成要素是丟擲異常和捕獲異常。這兩大要素共同實現程式控制流的非正常轉移。 丟擲異常可分為顯示和隱式兩種。顯示拋異常的主體是應用程式,它指的是在程式中使用“throw”關鍵字,手動將異常例項丟擲。隱式拋異常的主體則是Java虛擬機器,它指的是Jav
《深入理解 Java 虛擬機器》筆記整理
正文 一、Java 記憶體區域與記憶體溢位異常 1、執行時資料區域 程式計數器:當前執行緒所執行的位元組碼的行號指示器。執行緒私有。 Java 虛擬機器棧:Java 方法執行的記憶體模型。執行緒私有。 本地方法棧:Native 方法執行的記憶體模型。執行緒私有。 Java 堆:存放物件例項。分為新生代(Ed
【深入理解Java 虛擬機器】學習筆記一
目錄 執行時資料區域 根索引演算法 垃圾回收演算法 垃圾收集器 雙親委派模型 JDK命令列工具Jstack 和 JConsole 1、執行時資料區域 執行緒共享:方法區、堆 執行緒私有:虛擬機器棧、本地方法棧、程式計數器 2、根索引演
【Java】「深入理解Java虛擬機器」學習筆記(1) - Java語言發展趨勢
這本書寫的比較早,現在這些功能都已經不同程度的實現了。 1、模組化 JDK9之前的版本都是一個整體,使用者可能只需要使用一個小功能,但他不得不下載整個JDK。不能滿足定製化需求,顯然Java語言的發展因此大大受限。 所以,Sun公司在OpenJDK建立了一個Jigsaw(拼圖)的專案來推動模