JAVA程序的執行【JVM,JDK,JRE】

JAVA代碼的執行

  1. Java源碼 在Java編譯器中 經過一系列的加工稱.classs文件。
  2. 將.class文件放置到java虛擬機【JVM】。
  3. Java續集你使用類加載器加載class文件。
  4. 類加載器加載完成之後,對字節碼進行校驗,字節碼校驗通過後JVM吧字節碼翻譯成機器碼交給操作系統執行。

Java編譯器 .java源碼 在Java編譯器中【詞法分析、語法分析、語義分析、字節碼生成器】變成.class文件
Java虛擬機 .class文件放入JVM中【類加載器、字節碼校驗、翻譯機器碼,編譯執行】

所以JVM是java實現跨平臺的關鍵。

字節碼

如果某個程序因爲不同硬件平臺需要編寫多套代碼,是十分領人崩潰的,而Java可以一次編寫,到處執行。Java的跨平臺是通過增加一箇中間層來解決,字節碼"Bytecode"就是該中間層.Java所有執行有200個左右,一個字節(8位)可以存儲256種不同的指令信息,一個這樣的字節稱之爲"字節碼"。JVM可以將字節碼編譯執行,如果是熱點代碼,或通過JIT動態的編譯爲機器碼,提高執行效率。

熱點代碼:JVM虛擬機判定熱點代碼的方式有兩種:

  • 採樣熱點判定
    主要是虛擬機週期性檢查各個線程的棧頂,若某個方法經常出現在頂,那麼這個方法就是熱點方法。
  • 計數器熱點判定
    虛擬機給每個方法甚至代碼塊簡歷一個計數器,統計方法的執行次數,超過一定閥值標記此方法爲熱點方法。【在Client模式下閥值1500,Server是10000】

在Java編譯器中此法解析是通過空格分割出的單詞、操作符、控制符等信息,將其形成token信息流,傳遞給語法解析器,語法解析器把token信息流按照Java語法規範組裝成一顆語法樹,在語義分析階段,需要檢查關鍵字使用的是否合理、類型是否匹配、作用域是否正確,當語義解析完成後即可生成字節碼。

字節碼必須經過類加載器加載到JVM環境後纔可以執行。執行有三種模式:

  • 解釋執行
  • JIT編譯執行
  • JIT編譯與解釋混合執行

類加載

ClassLoader是提前加載.class文件到CPU中執行,在加載類時,使用的是"雙親委派模式"。

  1. Load階段讀取類文件,產生二進制流,並轉換爲特定的數據結構,然後創建對應類的java.lang.Class實例。
  2. Link階段包括驗證,準備,解析三個步驟。驗證是更加詳細的校驗,比如final是否合規,數據類型是否正確。
  3. Init階段執行類構造器。

垃圾回收機制

Java會對內存進行自動分配與回收管理,是上層業務更加安全。垃圾回收(Garbage Collection GC)。垃圾回收主要是清除不在使用的對象,自動釋放內存。

  1. 判斷對象是否存活。
    JVM引入了GC Roots。如果一個對象與GC Roots之間沒有直接或間接的引用關係(某個失去任何引用的對象,或者兩個相互引用的對象)判決這些對象的狀態是準備回收尚未回收。
    垃圾回收器是實現垃圾回收算法並且應用在JVM環境中的內存管理模塊。
    實現垃圾回收器可以參考
    https://www.cnblogs.com/jalja365/archive/2020/01/12/12182064.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章