java代碼的執行機制(分布式java應用筆記)

來源:互聯網
上載者:User

先看看jvm規範定義的標準結構:

首先我們看看類檔案是如何被編譯產生的。    從中可以看出通過javac編譯代碼分為3個步驟。我們再來分析這3個步驟:1,分析和輸入到符號表(Parse and Enter)Parse的過程為詞法和文法分析。詞法分析完成的是將代碼字串轉變為token序列;文法分析完成的是根據文法由token序列產生抽象文法樹。Enter過程將符號輸入到符號表。通常包括確定類的超類型和介面,根據需要添加預設的構造器,將類中出現的符號輸入到自身的符號表中。2,註解處理(Annotation Processing)改步驟用於處理使用者自訂的annotation。3,語義分析和產生class檔案(Analyse and Generate)Analyse步驟基於抽象文法樹進行一系列的語義分析,包括將文法樹中的名字,運算式等元素與變數,方法,類型等聯絡到一起;將泛型轉換為普通java;消除無用的代碼(if(false){...});檢查性工作等。Generate通過(com.sun.tools.javac.jvm.Gen)產生class檔案。 class檔案包含的資訊為:結構資訊(包括class檔案格式的版本號碼及各部分的數量與大小的資訊),中繼資料(對應聲明與常量的資訊),方法資訊。 類載入機制:裝載,連結,初始化。然後我們再來看類載入機制。load(裝載)將二進位位元組碼載入到jvm中。link(連結)負責對二進位位元組碼的格式進行校正,初始化裝載類中的靜態變數及解析類中調用的介面和類。initialize(初始化)執行類中的靜態初始化代碼,構造器代碼和靜態屬性代碼,在以下4中情況下初始化過程會被觸犯執行:1,調用了new2,反射調用了類中的方法3,子類調用了初始化4,jvm啟動過程中指定的初始化類。關於類載入機制準備用另一篇文章來說明。 類的執行機制:在源碼編譯階段將源碼編譯為jvm位元組碼,jvm位元組碼是一種中間代碼的方式,要由jvm在運行期對其進行解釋並執行,這種方式稱為位元組碼解釋執行方式。編譯執行:解釋執行的效率比較低,jdk支援將位元組碼編譯為機器碼的功能。編譯在運行市進行,通常稱為jit編譯器。對執行頻率高的代碼進行編譯,對執行頻率不高的代碼繼續採用解釋的方式進行所以又稱為hotspot vm。 反射執行:reflect,你懂的。需要注意的是getMethod方法比較豪效能,一方面是由於許可權的校正,另一方面是所有方法的掃描及method對象的複製,因此在使用反射調用多的系統中應緩衝getMethod返回的Method對象。而method.invoke的效能僅比直接調用低一點。       

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.