java體系結構與工做方式 《深刻分析java web 技術內幕》第七章

java體系結構與工做方式java

  • 7.1 JVM體系結構
何謂JVM
JVM(Java Virtual Machine) 經過模擬一個計算機來達到一個計算機所具備的計算功能
  1. 指令集:計算機所能識別的機器語言的命令集合
  2. 計算單元:能識別而且控制指令執行的功能模塊
  3. 尋址方式:地址的位數、最小地址和最大地址範圍,以及地址的運行規則
  4. 寄存器:包括操做數寄存器、變址寄存器、控制寄存器等的定義、數量和使用方式
  5. 存儲單元:可以存儲操做數寄存器和保存操做結構的單元
指令集與彙編語言:
  1. 指令集:能夠直接執行的二進制代碼;
  2. 彙編語言:與二進制代碼對應的的助記符;
JVM 體系結構詳解
一、類加載器:在JVM啓動時或者在類運行時將須要的class加載到JVM中
二、執行引擎:負責執行class文件中包含的字節碼指令集,至關於cpu
三、內存區:將內存劃分紅若干個區以模擬實際機器上的存儲、記錄和調度功能模塊
四、本地方法調用:調用C或者C++實現的本地方法代碼返回結果
  • 7.2 JVM工做機制
機器如何執行代碼, 通常程序運行到執行的過程:
源代碼——>預處理——>編譯器——>彙編程序——>目標代碼——>連接器——>可執行程序
基本運算分解爲二進制位運算,這些運算又經過指令來完成,而指令的核心目的是肯定須要運算的種類(操做碼)和運算須要的數據(操做數),以及從哪裏來(寄存器或棧)獲取操做數、將運算結果放到什麼地方(寄存器或棧)
JVM爲什麼選擇基於棧的架構
全部操做數必須先入棧,再根據指令中的操做碼選擇從棧頂彈出若干個元素進行計算後壓入棧中。JVM中操做數能夠存放在每個棧頂中的一個本地變量集中,即每一個方法調用時就會給這個方法分配一個本地變量集,這個變量集在編譯時已經肯定,因此操做數入棧能夠直接是常量入棧或從本地變量集中取一個變量壓入棧中。
理由:一、跨平臺二、java源文件編譯成class文件,編譯器通常採用以棧爲基礎的結構向鏈接器或者優化器傳遞這種編譯的中間結果,JVM能夠做爲鏈接器使用,也可做爲優化器使用三、爲了指令集的緊湊性(常量池)
執行引擎的架構設計
每當建立一個新的線程,JVM會爲這個線程建立一個Java棧,同時會爲這個線程分配一個PC寄存器,而且這個PC寄存器會指向這個線程的第一行可執行代碼。每當調用一個新的方法時會在這個棧上建立一個新的棧幀數據結構,以便保留此方法的元信息。
相關文章
相關標籤/搜索