摘要:模板解釋器和字節碼解釋器差不多,不一樣的地方在于直接把對應的指令集轉成本地代碼編譯器可以針對熱點代碼優化,執行開銷較大,但是能夠針對性的優化,效率最高垃圾收集器負責回收不再使用的對象,釋放和整理內存簡稱。
(原發于知乎, 定期同步至segmentfault, 原文地址:知乎-JVM入門系列-JVM總覽)
Java宣稱Write Once Run Everywhere,這意味著在一個平臺上開發的java程序可以不加修改的運行在其他平臺上面。能達成這個功能依賴的就是jvm屏蔽了底層的差異。
當我們編寫.java文件之后,編譯器會將其編譯成同名的.class文件。class文件是一個字節碼文件,jvm會加載并且執行它,下方就是整體框圖。
(圖片來源:wikipedia-Java virtual machine)
如圖所示,虛擬機主要可以被分為三塊:
類加載系統
運行時數據區
執行引擎
類加載系統Class Loader Subsystem
類加載系統負責驗證并且加載.class文件,主要可以劃分為三個步驟:
加載(Loading)
鏈接(Linking)
初始化(Initialization)
加載
類文件在這一塊被加載到內存中去。類加載器(class loader)可以劃分為Boot Strap class Loader, Extension class Loader, and Application class Loader
Boot Strap class Loader - 加載系統引導類( $JAVA_HOME/jre/lib))
Extension class Loader - 加載拓展類($JAVA_HOME/jre/lib/ext)
Application class Loader - 也被稱為User class loader, 負責加載應用層級的類
鏈接
Verify - 驗證字節碼是否正確
Prepare - 在這一步分配靜態變量并且設置默認值
Resolve - 所有的符號引用都會被替換成指向方法區的原始引用
初始化
這是類加載的最后一步,所有的靜態變量都會被賦值。執行順序是從上到下的,由父類到子類。
運行時數據區 Runtime Data Area
運行時數據區可以劃分為5個區域
方法區 - 保存類數據信息,包括成員信息,父類和接口信息,運行時常量池等,jvm共享
堆區 - 保存所有的對象信息,jvm共享
棧區 - 每個線程獨有自己的棧,生命周期和線程一致
PC寄存器區 - 儲存當前執行指令的地址,如果執行的是是本地方法pc為null
本地方法棧區 - 和棧區一致,只不過存放的是本地方法信息
執行引擎 Execution Engine
執行引擎負責執行代碼,執行引擎會依次讀取字節碼并且按順序執行。一般來說可以劃分為如下幾個組件
字節碼解釋器
字節碼解釋器(Bytecode Interpreter),就像名字顯示的一樣,是用來執行字節碼。優點是執行開銷小,缺點是執行效率較低。
模板解釋器
和字節碼解釋器差不多,不一樣的地方在于直接把對應的指令集轉成本地代碼
JIT編譯器
可以針對熱點代碼優化,執行開銷較大,但是能夠針對性的優化,效率最高
垃圾收集器
負責回收不再使用的對象,釋放和整理內存
Java Native Interface
Java native interface, 簡稱JNI。暴露了本地方法的接口,使得java可以調用本地方法
Native Method Libraries
本地方法庫
參考:
Java_virtual_machine
The JVM Architecture Explained
How JVM Works – JVM Architecture?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70277.html
摘要:本文是作者自己對中線程的狀態線程間協作相關使用的理解與總結,不對之處,望指出,共勉。當中的的數目而不是已占用的位置數大于集合番一文通版集合番一文通版垃圾回收機制講得很透徹,深入淺出。 一小時搞明白自定義注解 Annotation(注解)就是 Java 提供了一種元程序中的元素關聯任何信息和著任何元數據(metadata)的途徑和方法。Annotion(注解) 是一個接口,程序可以通過...
摘要:用于列舉最近分析過的文件常用功能欄,從左到右依次是概覽類直方圖支配樹查詢線程視圖報告相關詳細功能。針對那些占用堆內存超過整個堆內存大小的組件做一系列的分析,例如保留集合潛在的內存浪費問題等其他問題。 上一篇文章MAT入門到精通(一)介紹了MAT的使用場景和基本概念,這篇文章開始介紹MAT的基本功能,后面還有兩篇,一篇是MAT的高級功能,另一篇是MAT實戰案例分析。 三、歡迎頁 使用MA...
摘要:從使用到原理學習線程池關于線程池的使用,及原理分析分析角度新穎面向切面編程的基本用法基于注解的實現在軟件開發中,分散于應用中多出的功能被稱為橫切關注點如事務安全緩存等。 Java 程序媛手把手教你設計模式中的撩妹神技 -- 上篇 遇一人白首,擇一城終老,是多么美好的人生境界,她和他歷經風雨慢慢變老,回首走過的點點滴滴,依然清楚的記得當初愛情萌芽的模樣…… Java 進階面試問題列表 -...
閱讀 3652·2021-09-02 15:11
閱讀 4563·2021-08-16 10:47
閱讀 1560·2019-08-29 18:35
閱讀 3030·2019-08-28 17:54
閱讀 2843·2019-08-26 11:37
閱讀 1496·2019-08-23 16:51
閱讀 1799·2019-08-23 14:36
閱讀 1801·2019-08-23 14:21