Java虛擬機或JVM是Java運行時系統(tǒng)。它是一個有助于驅(qū)動Java代碼的虛擬機環(huán)境。與其他編程語言不同,每當我們編譯Java程序時,它永遠不會生成機器碼。盡管如此,Java編譯器會為Java虛擬機生成字節(jié)碼。
JVM是如何工作的?
JVM允許我們同時解決可移植性和安全性問題:
1.平臺獨立性:
在計算機編程中,平臺一詞代表程序運行的環(huán)境。平臺無關(guān)僅僅意味著程序可以在不同平臺上輕松執(zhí)行,而無需重寫和重新編譯。這僅是可能的。因為將Java程序轉(zhuǎn)換為字節(jié)碼可以更容易地在不同環(huán)境中執(zhí)行程序,因為每個平臺只需要實現(xiàn)JVM。
盡管JVM會因平臺而異,但它們可以理解相同的Java字節(jié)碼。這使得Java成為一種獨立于平臺的技術(shù),也證明了WORA(Write once Run Anywhere)的合理性。
2.安全:
JVM在安全方面扮演著重要的角色。JVM正在執(zhí)行的Java程序也有助于使其安全,因為JVM負責執(zhí)行環(huán)境,它可以包含程序并防止出現(xiàn)系統(tǒng)外部的問題。這是因為字節(jié)碼已經(jīng)過高度優(yōu)化,字節(jié)碼可以讓JVM更快地運行程序。JVM還會驗證字節(jié)碼,以確保程序的進一步安全運行。
JVM架構(gòu):
Java虛擬機或JVM的內(nèi)部架構(gòu)包括:
1.類加載器:
類加載器在運行時初始化類文件。它動態(tài)加載類并讀取.Class文件并保存在方法區(qū)域中創(chuàng)建的字節(jié)碼。它的三個主要功能是加載、鏈接和初始化。類加載器主要分為三種類型:
- Bootstrap ClassLoader:Bootstrap類加載器負責加載Java.Lang.ClassLoader。它是JVM的一個重要部分,它從Rt.Jar位置加載JDK內(nèi)部類。它也被稱為原始類加載器。
- Extension ClassLoader:擴展類加載器從JDK擴展庫中加載類。
- 系統(tǒng)類加載器:系統(tǒng)類加載器的主要功能是從當前設(shè)置的類路徑中加載類。
2.方法區(qū):
每個JVM都有一個方法區(qū)。方法區(qū)存儲所有類級別的數(shù)據(jù),如類名、方法、靜態(tài)變量、非靜態(tài)變量、字段等。
3.堆:
堆區(qū)默認存放對象數(shù)據(jù)和對應(yīng)的實例變量。
4.堆棧:
將為每個單獨的線程創(chuàng)建一個單獨的運行時堆棧。創(chuàng)建的每個堆棧塊稱為堆棧幀,用于存儲相應(yīng)的局部變量。線程被銷毀后,堆棧由JVM自動終止。
5.程序計數(shù)器寄存器:
將為每個線程創(chuàng)建一個單獨的PC寄存器。它保存當前執(zhí)行數(shù)據(jù)的數(shù)據(jù)。一旦執(zhí)行停止,PC寄存器將自動更新到下一部分。
6.原生方法棧:
包含我們程序中使用的所有本機方法。
7.執(zhí)行引擎:
執(zhí)行引擎逐行執(zhí)行字節(jié)碼。它包含三個主要組件:
- 口譯員:JVM的一個非常重要的成員是解釋器。解釋器根據(jù)帶下劃線的平臺指令以及運行狀態(tài)轉(zhuǎn)換字節(jié)碼指令并執(zhí)行代碼。
- 即時編譯器(JIT):JIT編譯器在執(zhí)行期間根據(jù)需要編譯代碼。只有將從編譯中受益的代碼才被編譯。剩下的代碼只是解釋。通過這種方式,Just-In-Time編譯器提供了一種性能提升,同時也提高了解釋器的效率。
- 垃圾收集器:在Java中,用戶不必擔心如何銷毀不再使用的對象,因為內(nèi)存的釋放是自動處理的。用于完成的技術(shù)是引用垃圾收集。在垃圾回收中,當一個未引用對象存在時,這個對象所要求的內(nèi)存可以被另一個對象回收。
8.Java原生接口:
Java Native Interface(JNI)是一個框架,它提供了一個接口來與本地方法庫交互并調(diào)用用C、C++、Assembly等語言編寫的應(yīng)用程序。
以上就是北大青鳥長沙麓谷校區(qū)小編介紹的"所有關(guān)于Java虛擬機學習的掌握",希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為您服務(wù)。
Java學習