JVM總括三-字節碼、字節碼指令、JIT編譯執行

JVM總括三-字節碼、字節碼指令、JIT編譯執行html

目錄:JVM總括:目錄java


 

  java文件編譯後的class文件,java跨平臺的中間層,JVM經過對字節碼的解釋執行(執行模式,還有JIT編譯執行,下面講解),屏蔽對操做系統的依賴。一個字節(8位)能夠儲存256中不一樣的指令,這樣的指令就是字節碼,java全部指令有200個左右,這些指令組成了字節碼文件(.class)。post

1、字節碼的主要指令:

  .class文件裏面的十六進制文件(如:圖一),其中CAFE BABE是標誌這個文件爲java的編譯後的文件,00000034表明版本號,01670700一個字節(8位)就是一個字節指令,因爲數值指令太難看懂,咱們能夠用javap將指令翻譯爲助記指令(如:圖二)。spa

  圖一操作系統

  圖二翻譯

一、加載或儲存指令

  在棧幀中,經過指令操做數據在局部變量表與操做棧間傳遞。調試

  • ILOAD、ALOAD:將int、對象引用類型從局部變量表壓入操做棧頂;
  • ISTORE、ASTORE:將int、對象引用類型從操做棧頂儲存到局部變量表裏;
  • ICONST、BIPUSH、SIPUSH、LDC:將常亮加載到操做棧頂。

二、運算指令

  對操做棧上的值進行運算,並把結果寫入操做棧頂,如IADD、IMULhtm

三、類型轉換指令

  I2L、D2F對象

四、對象建立與訪問指令

   NEWblog

 除了字節碼指令外,還包括像LINENUMBER儲存字節碼與源碼對應,方便調試定位;LOCALVARIABLE儲存當前方法使用到的局部表量表。

2、java源碼文件轉化爲字節碼(.class)文件的過程

   JAVA源文件---------->詞法解析---------->語法解析---------->語義分析--------->生成字節碼--------->字節碼文件

  詞法分析:根據空格分割出單詞、操做符等,造成token信息流;

  語法分析:根據token流和java語法規範生成語法樹;

  語義分析:檢查關鍵字、類型匹配是否正確;

3、執行模式

一、解釋執行

  JVM經過加載到的字節碼進行執行;

二、JIT編譯執行

  將熱點代碼(例如:高頻方法體、循環體、公共模塊)直接翻譯成機器碼,提升之後的執行效率;

三、JIT編譯執行與解釋執行混合執行(主流JVM執行模式)

每次方法調用的時候,方法調用計數器加1,若是計數達到閾值,請求編譯成機器碼,將機器碼放在Code cache裏面,下次執行查看是否已編譯成機器碼,已編譯的直接執行機器碼,沒有編譯的經過解釋執行(也就是執行字節碼);

相關文章
相關標籤/搜索