×

Java虛擬機深入研究

  • 作者:新網(wǎng)
  • 來源:新網(wǎng)
  • 瀏覽:100
  • 2018-05-09 14:36:31

之前對虛擬機的各個部分進行了比較詳細的說明,下面通過一個具體的例子來分析它的運行過程。虛擬機通過調用某個指定類的方法main啟動,傳遞給main一個字符串數(shù)組參數(shù),使指定的類被裝載,同時鏈接該類所使用的其它的類型,并且初始化它們。例如對于程序:

   之前對虛擬機的各個部分進行了比較詳細的說明,下面通過一個具體的例子來分析它的運行過程。虛擬機通過調用某個指定類的方法main啟動,傳遞給main一個字符串數(shù)組參數(shù),使指定的類被裝載,同時鏈接該類所使用的其它的類型,并且初始化它們。例如對于程序:

0b5f82a822e5c75af81279e3c400f493.jpg

<div>  class HelloApp
  {
  public static void main(String[] args)
  {
  System.out.println("Hello World!");
  for (int i = 0; i < args.length; i++ )
  {
  System.out.println(args[i]);
  }
  }
  }
  編譯后在命令行模式下鍵入: java HelloApp run virtual machine
  將通過調用HelloApp的方法main來啟動java虛擬機,傳遞給main一個包含三個字符串"run"、"virtual"、"machine"的數(shù)組?,F(xiàn)在我們略述虛擬機在執(zhí)行HelloApp時可能采取的步驟。
  開始試圖執(zhí)行類HelloApp的main方法,發(fā)現(xiàn)該類并沒有被裝載,也就是說虛擬機當前不包含該類的二進制代表,于是虛擬機使用ClassLoader試圖尋找這樣的二進制代表。如果這個進程失敗,則拋出一個異常。類被裝載后同時在main方法被調用之前,必須對類HelloApp與其它類型進行鏈接然后初始化。鏈接包含三個階段:檢驗,準備和解析。檢驗檢查被裝載的主類的符號和語義,準備則創(chuàng)建類或接口的靜態(tài)域以及把這些域初始化為標準的默認值,解析負責檢查主類對其它類或接口的符號引用,在這一步它是可選的。類的初始化是對類中聲明的靜態(tài)初始化函數(shù)和靜態(tài)域的初始化構造方法的執(zhí)行。一個類在初始化之前它的父類必須被初始化。整個過程如下:
  
  本文通過對JVM的體系結構的深入研究以及一個Java程序執(zhí)行時虛擬機的運行過程的詳細分析,意在剖析清楚Java虛擬機的機理。

免責聲明:本文內容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權,也不承認相關法律責任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內容,請發(fā)送郵件至:operations@xinnet.com進行舉報,并提供相關證據(jù),一經(jīng)查實,本站將立刻刪除涉嫌侵權內容。

免費咨詢獲取折扣

Loading