第一章 Java代碼執行流程


說明:本文主要參考自《分布式Java應用:基礎與實踐》

 

1、Java代碼執行流程

  • 第一步:*.java-->*.class(編譯期
  • 第二步:從*.class文件將其中的內容加載到內存(類加載)(運行期
  • 第三步:執行代碼(運行期

 說明:

  • 整個白框部分表示JVM管理的內存
  • 包含棧幀的地方稱作JVM方法棧,一個棧幀就是一個方法
  • 在Hotspot JVM中,JVM方法棧和本地方法棧是同一個
  • java方法是通過出棧操作來執行的(在類加載后入棧),所以執行引擎直接操作的是棧幀(即一個方法)
  • 具體的JVM內存結構,查看第一章 JVM內存結構

2、代碼編譯

javac命令將源碼文件編譯為*.class文件。

后邊將介紹:

  • javac將*.java編譯成*.class文件的過程
  • class文件的文件格式,以及其存儲的內容

 

3、類加載

主要是指將*.class文件加載到JVM,並形成Class對象的機制,之后就可以對Class對象實例化並調用了。

特點:

  • 類加載機制可以在運行時動態加載外部類

后邊將介紹:

  • 類加載的過程
  • 類加載的雙親委托機制
  • 類加載器的層次關系及源碼

 

4、執行代碼

兩種執行方式:

  • 解釋執行(運行期解釋字節碼並執行)
    • 速度慢,效率低
    • 但是要比編譯為機器碼執行省內存
  • 編譯為機器碼執行(將字節碼編譯為機器碼並執行,這個編譯過程發生在運行期,稱為JIT編譯),下面是兩種模式
    • client(即C1):只做少量性能開銷比高的優化,占用內存少,適用於桌面程序。
    • server(即C2):進行了大量優化,占用內存多,適用於服務端程序會收集大量的運行時信息

注意:

  • 32為機器默認選擇C1,可在啟動時添加-client或-server來指定,64位機器若CPU>2且物理內存>2G則默認為C2,否則為C1
  • Sun JDK執行代碼的機制對在執行過程中執行頻率高的代碼進行編譯,對執行頻率不高的代碼繼續解釋執行

后邊將介紹:

  • Sun JDK執行代碼的過程
  • C1以及C2執行的一些優化
  • 編譯執行與解釋執行的使用的衡量點


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM