1. 程式人生 > >Java虛擬機器學習筆記(位元組碼執行引擎)

Java虛擬機器學習筆記(位元組碼執行引擎)

執行時棧幀結構

1.區域性變量表 null JIT編譯器優化
2.運算元棧 LIFO
3.動態連結 |
4.方法返回地址 | 棧幀資訊
5.附加資訊 |

——————————————————————————————————

方法呼叫

1.解析呼叫

符號引用 靜態、私有、例項構造器、父類方法 final 非虛方法

2.分派

1.靜態分派
虛擬機器(編譯器)在過載時是通過引數的靜態型別而不是實際型別作為判斷
靜態型別在編譯器是可期的,且選擇更加適合的版本
2.動態分派
重寫 invokevirtual 執行期確定接受者實際型別
3.單分派與多分派
方法的接收者與方法的引數統稱為方法的宗量。
單分派 一宗量 多分派 多餘一個宗量
Java語言靜態多分派,動態單分派
4.虛擬機器動態分派的實現
虛方法表 介面方法表 | 內聯快取 守護內聯

——————————————————————————————————

基於棧的位元組碼解釋執行引擎

1.解釋執行 (/編譯執行)
2.基於棧的指令集 可移植性,更緊湊,簡單(/基於暫存器的指令集)速度快,受限硬體
3.基於棧的直譯器執行過程

public int add(){ int a =1 ; int b = 2 ; return a+b };

0:bipush 1
2:istore_1
3:sipush 2
6:istore_2
7:iload_1
8:iload_2
9:iadd
10:ireturn

相關推薦

Java虛擬機器學習筆記位元組執行引擎

執行時棧幀結構 1.區域性變量表 null JIT編譯器優化 2.運算元棧 LIFO 3.動態連結 | 4.方法返回地址 | 棧幀資訊 5.附加資訊 | —————————————————————————————————— 方法呼叫 1.解析呼叫 符號引用 靜態、私有

[深入理解Java虛擬機器]第九章 位元組執行引擎-類載入及執行子系統的案例與實戰

概述 在Class檔案格式與執行引擎這部分中,使用者的程式能直接影響的內容並不太多, Class檔案以何種格式儲存,型別何時載入、如何連線,以及虛擬機器如何執行位元組碼指令等都是由虛擬機器直接控制的行為,使用者程式無法對其進行改變。能通過程式進行操作的,主要是

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

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

深入理解JAVA虛擬機器學習筆記JVM記憶體模型

一、JVM記憶體模型概述 JVM記憶體模型其實也挺簡單的,這裡先提2個知識點: 1、組成:java堆,java棧(即虛擬機器棧),本地方法棧,方法區和程式計數器。 2、是否共享:其中方法區和堆區是執行緒共享的,虛擬機器棧,本地方法棧和程式計數器是執行緒私有的,也稱執行緒

Java虛擬機器學習筆記:記憶體區域與HotSpot虛擬機器物件探祕

執行時資料區域 Java虛擬機器在執行Java程式的過程中會把它所管理的記憶體劃分為若干個不同的資料區域。這些區域都有各自的用途,以及建立和銷燬的時間,有的區域隨著虛擬機器程序的啟動而存在,有些區域則依賴使用者執行緒的啟動和結束而建立和銷燬。根據《Java虛擬機

Java 虛擬機器學習筆記3——垃圾回收機制

一. 為什麼需要“垃圾”回收 1.什麼是“垃圾”? 此處講的“垃圾”分為兩種: 廢棄常量和無用的類。 廢棄常量,主要是判斷當前系統中有沒有物件引用這個常量; 無用類則比較嚴格,需要滿足下面三個條件: (1)該類的

深入理解Java虛擬機器位元組執行引擎

本文首發於微信公眾號:BaronTalk 執行引擎是 Java 虛擬機器最核心的組成部分之一。「虛擬機器」是相對於「物理機」的概念,這兩種機器都有程式碼執行的能力,區別是物理機的執行引擎是直接建立在處理器、硬體、指令集和作業系統層面上的,而虛擬機器執行引擎是由自己實現的,因此可以自行制定指令集與執行

深入理解Java虛擬機器類檔案結構+類載入機制+位元組執行引擎

周志明的《深入理解Java虛擬機器》很好很強大,閱讀起來頗有點費勁,尤其是當你跟隨作者的思路一直探究下去,開始會讓你弄不清方向,難免有些你說的啥子的感覺。但知識不得不學,於是天天看,反覆看,就慢慢的理解了。我其實不想說這種硬磨的方法有多好,我甚至不推薦,我建議大家閱讀這本書時,由淺入深,有舍有得,先從巨集觀去

Java虛擬機器學習筆記

一、JDK、JRE和JVM JDK(Java Development Kit) 是 Java 語言的軟體開發工具包(SDK)。在JDK的安裝目錄下有一個jre目錄,裡面有兩個資料夾bin和lib,在這裡可以認為bin裡的就是jvm,lib中則是jvm工作所需要的類庫,而jv

深入理解Java虛擬機器學習筆記2-JVM中物件佈局

一、物件的記憶體佈局 在Hotspot中,物件在記憶體中儲存佈局可以分為三塊: 物件頭(Header) 、例項資料(Instance Data)、對齊填充(Padding) 二、物件頭 1、物件執行時資料: 雜湊嗎、GC分代年齡、鎖狀態標誌、執行緒持有的鎖、偏向執行緒I

深入理解Java虛擬機器學習筆記3-執行緒安全和鎖優化

併發處理是壓榨計算機運算能力最有力的工具。 1.執行緒安全 當多個執行緒訪問一個物件時,如果不用考慮這些執行緒執行時環境下排程和交替執行,也不需要進行額外的同步,或者在呼叫方進行任何其他的協調操作,呼叫這個物件的行為都可以獲取正確的結果,那麼這個物件是執行緒安全的。 2

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

第八章 虛擬機器位元組碼執行引擎 8.1概述 執行引擎是Java虛擬機器最核心的組成部分之一。“虛擬機器”是一個相對於“物理機”的概念,這兩種機器都有執行程式碼的能力,其區別是物理機的執行引擎是直接建立在處理器、硬體、指令集和作業系統層面上的,而虛擬機器的執行引擎則是由自己

深入理解java虛擬機器閱讀筆記java記憶體區域

1.1  概述 對於java來說,虛擬機器是採用的自動管理記憶體機制,不需要手動去寫delete/free程式碼,但是常在河邊走哪有不溼鞋,程式不可避免會遇到記憶體溢位或洩漏的問題,因此知道記憶體區域分佈情況對於記憶體管理是很有必要的。 1.2  執行時資料區域 java虛擬機器在執

深入理解java虛擬機器閱讀筆記物件是否存活與垃圾收集演算法

1.1  判斷物件是否存活 1.1.1  引用計數演算法:給每個物件新增一個引用計數器,當一個地方引用此物件時,該計數器值+1;當引用失效時,該計數器值-1;當此物件沒有被引用時,該計數器的值為0。雖然此演算法實現簡單,效率高,但是很難解決兩個物件之間相互迴圈引用的問題。 1.1.2&

深入理解Java虛擬機器學習筆記——三、虛擬機器類載入機制

1、概述 虛擬機器把描述類的資料從Class檔案載入到記憶體,並對資料進行校驗、轉換解析和初始化,最終形成能夠被虛擬機器直接使用的資料型別,這就是虛擬機器的類載入機制。在Java中,類的載入、校驗、解析和初始化都是在執行期間完成的。 2、類載入的時機 類從被載入都虛擬機器記

深入理解Java虛擬機器學習筆記——四、Java記憶體模型與多執行

一、Java記憶體模型 Java記憶體模型的意義:遮蔽掉各種硬體和作業系統的記憶體訪問差異,以實現Java程式在各種平臺上一致的記憶體訪問效果。 1、主記憶體與工作記憶體 Java記憶體模型的主要目標是定義程式中各個變數的訪問規則,即在虛擬機器中把變數儲存到記憶體和從記憶體

Java虛擬機器學習筆記(5)——類檔案結構

          上一篇介紹了JVM物件的記憶體分配和回收策略。這篇接著介紹Java的類檔案結構,這篇的內容可能會比較多,我儘量循序漸進的講。要學習class的檔案結構,先要大體對class檔案結構有哪些內容有一個整體把握。現在,看下面一張表。           上面

深入理解JAVA虛擬機器學習筆記14——類載入的準備和解析

每天進步一點點!今天我們一起看一下類載入的準備階段和解析階段。先看一下準備階段:主要任務是在方法區中為類變數(僅static修飾變數,不包含例項變數)分配記憶體並設定類變數初始化的階段。這裡面的區別,我們通過下面的程式碼來簡單瞭解一下。我們將上面的程式碼編譯好後,通過位元組碼工具看一下其中的資訊。首先,從上

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

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

java學習筆記20-多執行

1. Thread類 1.1 繼承實現 package com.daigua20; public class ThreadDemo { public static void main(String[] args) { MyThread t1 = new MyThread();