亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java JVM虛擬機是如何運行的

發布時間:2020-11-12 16:20:53 來源:億速云 閱讀:121 作者:Leah 欄目:編程語言

本篇文章為大家展示了Java JVM虛擬機是如何運行的,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

一:JVM基礎概念

         JVM(Java虛擬機)一種用于計算設備的規范,可用不同的方式(軟件或硬件)加以實現。編譯虛擬機的指令集與編譯微處理器的指令集非常類似。Java虛擬機包括一套字節碼指令集、一組寄存器、一個棧、一個垃圾回收堆和一個存儲方法域。

         Java虛擬機(JVM)是可運行Java代碼的假想計算機。只要根據JVM規格描述將解釋器移植到特定的計算機上,就能保證經過編譯的任何Java代碼能夠在該系統上運行。

下面看下Jvm的體系結構圖:

Java JVM虛擬機是如何運行的

二:解釋型語言和編譯型語言的聯系與區別。

編譯型語言是通過編譯器將程序編譯成目標機器所能識別的機器碼,而解釋型語言不需要編譯過程,由該語言的解釋器讀取腳本,按照語法規則進行解釋,然后調用解釋器內建的命令(或者庫函數)。例如,C語言的printf()函數經過靜態編譯后,printf()所需的所以代碼都以機器碼的形式寫入可執行文件中,shell在執行程序時,在指定路徑搜索該文件,然后加載器(Loader)加載該程序的ELF文件到內存中,跳轉到程序入口,將控制權交由該程序。

動態編譯的情況有些不同。由于printf()是很常用的函數,系統將常用函數集中起來做成庫,當我寫一個Myprintf()函數時調用printf() 時,動態編譯后形成的ELF文件不會包含printf()相關的代碼,但是會有些信息告訴系統:“我的程序將會調用printf(),因此我需要printf()的地址”。加載ELF文件后,首先運行動態連接器(ldd),ldd知道程序依賴的動態庫,系統中如果沒有加載該動態庫,就會通知系統加載該庫,并把庫函數的入口地址綁定到程序需要的地方,然后跳轉到程序入口地址,開始運行程序。這里,我們所寫的程序一經編譯,就變成特定機器的機器碼和一些附屬信息(符號表,地址,變量值等),然后通過系統加載運行機制就變成“動態程序”——進程。

解釋型語言的執行過程離不開解釋器,python,perl,ruby等等。所以腳本的第一行一般是#/usr/bin/×××。×××代表了各語言相應的解釋器。腳本一般由表達式(expression)和Block of expressions組成,解釋器首先要做的就是分析并理解表達式結構,形成“執行序列”。這個“執行序列”是中立的,不針對任何native machine,所以“可移植性”高。這里不用“字節碼”代替“執行序列”是考慮到在jvm中有字節碼的概念,他們之間有顯著的不同。決定執行序列是解釋器最主要的作用。假設,python輸出的函數為python_print(),那么python解釋器在“解釋”腳本時遇到這個表達式就將調用系統的print()函數執行輸出操作。你也可以把腳本理解成高級配置文件,這個文件指導python解釋器如何運行,解釋器內部已經制訂了“如何”運行的若干規則。

三:Java的執行過程

JVM執行Java程序要比上述兩個復雜,因為它已經被稱作machine了。下圖是JVM的結構框圖。主要包含:垃圾回收器,類加載子系統,執行引擎,運行時數據區等。

上述內容就是Java JVM虛擬機是如何運行的,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

台江县| 常德市| 蓬安县| 壶关县| 南召县| 龙江县| 阿克苏市| 瓮安县| 绍兴县| 库尔勒市| 锦州市| 延川县| 库伦旗| 汉寿县| 峨眉山市| 德钦县| 凉山| 陇西县| 靖宇县| 池州市| 新余市| 陆河县| 汝城县| 宜兰市| 崇文区| 永登县| 德惠市| 左权县| 北辰区| 汶川县| 广元市| 五常市| 甘德县| 桐乡市| 临潭县| 永泰县| 曲周县| 木兰县| 简阳市| 鄂温| 和顺县|