Java執行原理

jopen 10年前發布 | 57K 次閱讀 Java Java開發

先記錄參考的文檔,謝謝他們

 http://qing.blog.sina.com.cn/2494474521/94aea91933002vg2.html

http://www.importnew.com/1486.html 這個強烈推薦看


看個java文件編譯和執行全程:

Java執行原理

虛擬機是一種通過模擬方式來實現物理計算機體系架構的軟件。

Java虛擬機是保障Java程序能跨平臺運行的虛擬計算機。

Java虛擬機規范是對異構硬件、多樣os 的 抽象、是一種 軟件層次的計算機體系架構的約定描述,你可以依照該規范實現自己的java虛擬機。

通常的物理計算機體系架構是經典的馮諾依曼,基于寄存器的計算架構,能執行有限的機器指令碼

jvm有自己的指令系統,jvm是基于堆棧的計算架構

Java堆棧要求Java程序執行中的每個線程都有一個獨立的堆棧,每個當前執行的方法是當前線程堆棧的一個片斷(Frame)
, 最終還是jvm將自己的指令翻譯為物理計算機的機器指令才能執行的


不直接寫機器指令碼是因為難懂難記難看難維護

□ JVM和其它任何虛擬機一樣,都是完成資源的封裝,從而提高資源的利用率和可管理性。 
□ JVM是Java平臺體系的核心基礎設施。Java語言編寫的程序在JVM上被解釋和執行。 
□ JVM在JSR-924中進行了規范,在JSR-202中維護更新。JVM規范使JVM的具體實現和建立在JVM之上的應用之間耦合性降低。
 □ JVM規范主要從Java字節碼規范、基本的執行過程、JVM指令集和抽象架構四個層面進行描述。 
 □ JVM實現中的關鍵問題是內存管理和垃圾回收、JVM指令到機器指令翻譯方法、多線程支持

Java虛擬機根據jvm規范將Java源程序編譯為jvm操作指令的Java字節碼,這種指令不是機器碼指令

在裝有jvm的機器上,運行Java程序實際是jvm加載編譯好的java字節碼文件,然后將字節碼文件中的指令翻譯為機器碼執行。

Java執行原理


首先大概看一下JVM的抽象架構

Java執行原理

可以看出jvm進程占用的物理內存 主要分為 三大塊:

1、類加載器      :從入口處開始按需加載字節碼文件,填充這些數據到運行時數據區

2、運行時數據區:核心區,運行的時候操作所分配的內存區

3、執行引擎     :jvm的cpu,不斷地取指令,JIT編譯翻譯,執行

外圍

1、編譯好的字節碼文件,一般為.class

2、native功能庫

java字節碼.class 文件結構

Java執行原理

類加載器 怎么加載類文件的,jvm的類加載采用父類委托制,子加載器能查詢父加載器已緩存類,反之不行。

Java執行原理

運行時數據區,公有:對象實例都在 heap里,方法區還包括常量池,

每個線程私有 程序計數器,jvm 棧 本地方法棧

Java執行原理

jvm棧中壓入的是棧幀Frame這個frame包含了很多數據:局部變量、操作數棧、常用引用

除了pc計數器區 其他區都有可能產生oom,棧區還有可能stackoverflow

Java執行原理

執行引擎,將字節碼即時編譯 優化 為本地代碼, 然后執行

Java執行原理




執行命令: java Test  背后到底做了什么

Java執行原理



 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!