1. gzyueqian
      13352868059

      Java培訓:了解JVM加載、JVM鏈接和JVM初始化

      更新時間: 2022-05-12 09:59:43來源: 粵嵌教育瀏覽量:7518

        Java 虛擬機 (JVM) 在幕后做了很多工作來執行提交給它執行的二進制類文件。并不是那么簡單,因為它看起來就像使用 java 命令調用 JVM,并將類文件作為命令行參數傳遞給它。類文件經歷了許多階段,但在這里我們基本上看見了最初的三個執行階段,稱為加載、鏈接和初始化過程。即便如此,它本身就是一個巨大而復雜的話題。因此,這里只簡要描述了關鍵方面,以了解它的全部內容。想對java有更深入的了解,可以參加java培訓,在專業老師的指導下,你可以很快掌握java的更多特性。

        概述

        加載、鏈接和初始化是 JVM 在將字節碼(稱為類文件)加載到 JVM 中執行時立即開始的初始過程。其他過程——例如實例化、垃圾收集和終結——發生在類生命周期的中間階段。最后,卸載過程發生在生命周期的末尾。JVM 提供了不同進程運行的環境。使用什么語言編譯器將源代碼轉換為類文件絕對無關緊要,只要它符合 JVM 理解的標準。

        除了 Java,還有很多知名的 JVM 語言,如 Clojure、Groovy、Scala、Jruby、Jython 等。程序可以用這些語言中的任何一種編寫,并由特定語言編譯器編譯。編譯后的目標代碼以在 JVM 上運行的方式創建。

        盡管 JVM 為類文件的執行強加了某些規則,但在底層,它可以修改它在底層平臺上的交互方式并優化性能。這個想法使它成為一個開放的架構,歡迎特定于供應商的調整,以使其在某些情況下變得更好。

        因此,除了 JVM 的 Oracle 和 OpenJDK 實現之外,市場上還有其他可用的活躍實現,例如 CACAO、jikes RVM、Maxine、JamVM 等。在java培訓中,培訓課程不僅注重理論,更注重項目的實戰能力,能夠讓你快速適應企業開發的進度,成為企業所需要的java人才。

        






        加載、鏈接和初始化過程是在將類文件導入 JVM 的開始階段啟動的。盡管其中涉及很多錯綜復雜的內容,但如果我們深入探討這個主題而只留下其他 JVM 進程,那么這個想法就會變得過于密集而無法清晰理解。這是因為一個想法與另一個想法是相互關聯的。例如,如果在加載階段出現錯誤,報告會等到鏈接器開始發揮作用。因此,加載、鏈接和初始化的想法可能看起來是離散的,但它們在許多情況下重疊。

        類文件之旅

        Java 類文件的生命周期之旅:Java 編譯器創建一個類文件,作為作為源代碼提供給它的文件的結果。類文件雖然是二進制數據,但遠不能在沒有 Java 虛擬機 (JVM) 的機器上執行。這意味著類文件完全依賴JVM環境來執行。JVM 提供運行時環境并理解類文件中表示的二進制指令。與底層平臺交互執行類文件指令的是JVM。中間人 JVM 不僅為類文件提供了游樂場,而且還充當了交換服務和資源的中介。因此,如果我們分解JVM成功執行一個類文件所承擔的進程,它們是很多的。但是,首先,JVM 在將類文件導入其域的初始階段遵循三個過程。這三個過程稱為加載、鏈接和初始化。通過java培訓,會有關于JVM的培訓課程,學會這些技巧,有助于更好地進行開發項目,少出問題。

        加載過程

        根據 Java 8 虛擬機規范,它是查找具有特定名稱的類或接口類型的二進制表示并從該二進制表示創建類或接口的過程。

        JVM 提供了兩種類型的類加載器。一種稱為引導類加載器,另一種是用戶定義的類加載器。bootstrap 類加載器在 JVM 中被嚴格定義,并根據規范加載類文件。用戶定義的類加載器對供應商特定的實現是開放的,并且可以通過 java.lang.Class 實例自定義加載類。請注意(在 Java API 文檔中),此類沒有公共構造函數。因此,類對象由JVM自動創建,并且可以通過該類的成員函數獲取有關類內部數據結構的所有信息。一旦加載了一個類,JVM就會根據內部數據結構對其進行解析。通常,類加載器在加載時或提前或與一組類相關時緩存類型的二進制表示。如果遇到任何問題,即使在加載的初始階段,例如由于類格式錯誤,它也不會立即報告問題;相反,它會等到程序主動引用該類并報告鏈接器錯誤。如果在整個程序過程中沒有進行此類引用,則錯誤可能會持續存在但不會報告。

        因此,簡而言之,加載過程基本上完成了這三個功能:

        從類文件創建二進制數據流

        根據內部數據結構解析二進制數據

        創建 java.lang.Class 的實例

        






        鏈接過程

        根據 Java 8 虛擬機規范,它是獲取類或接口并將其組合到 JVM 的運行時狀態以便可以執行的過程。參加以實戰項目為主要教學方法的Java培訓,可以有效地縮短同企業具體用人需求之間的差距,快速提升自己。

        鏈接從類的驗證過程開始,確保它符合語言的語義并且不會破壞 JVM 的完整性。但是,JVM 規范說明了驗證過程,但為特定于供應商的 JVM 實現者提供了靈活性,以決定何時應該進行鏈接活動或如何驗證類型。

        JVM 指定了在特定情況下要拋出的異常列表。在這方面,值得一提的是,從二進制數據被解析到內部數據結構的一開始,就有一點點的檢查和驗證,這個過程中的檢查確保了操作不會崩潰。此外,還進行檢查以確保二進制數據的結構與其預期的格式一致。加載器還檢查一個類是否是 java.lang.Object 的子類,唯一的例外是 Object 類本身。這通常需要遞歸加載超類層次結構。以這種方式,在多個階段進行大量驗證,但通常認為正式驗證從鏈接開始。

        驗證完成后,JVM 為類變量分配內存,并根據變量的類型將它們初始化為默認值。然而,實際初始化(使用用戶定義的初始化值)直到下一個初始化階段才會發生。這個過程稱為準備。

        最后,在可選的解析階段,JVM 定位常量池(符號表)中引用的類、接口、字段和方法,并從它們的符號引用中確定具體值。Java 符號引用解析同樣對特定于供應商的實現開放。它可能決定在使用時解析類或接口中的符號引用,或者在驗證過程中解析它們。簡而言之,驗證檢查類的二進制表示在結構上是否正確。并且,它可能確保它可能必須加載其他類(可能)而無需驗證這些類(如果這些類是 Java API 庫的一部分)。想要快速學習java,建議參加java培訓班,有針對式的學習,避免多走彎路。

        因此,簡而言之,鏈接過程涉及三個功能:

        確認

        準備

        分辨率(可選)

        






        初始化過程

        根據 Java 8 虛擬機規范,類或接口的初始化包括執行其類或接口的初始化方法。

        在通過驗證、準備和可選解析過程鏈接類或接口之后,初始化階段使類準備好進行第一次活動使用。該過程從使用程序預期開始的值初始化類變量開始。程序員有責任根據自己的宏偉計劃決定類變量的適當值。因此,初始化意味著類變量通過程序員描述的一些初始化例程進行初始化,并在類的直接超類尚未初始化的情況下對其進行初始化。然而,接口的初始化不需要初始化它的超接口。這是一個接口的例外。

        因此,概括起來,初始化過程涉及以下兩個功能:

        用程序員指定的例程初始化類變量。

        如果尚未初始化,則初始化其超類。

        結論

        這是對 JVM 中加載、鏈接和初始化過程的簡要概述,每個階段都涉及許多更精細的復雜性,并且為了保持簡單和簡潔而被忽略了。Java培訓課程有關于JVM的知識和技能,還有實操項目鞏固你所學的知識,讓你擁有一定的項目經驗,在以后找工作時,比別人更有競爭力。

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 一级中文字幕免费 | 亚洲水中色Av综合在线 | 久久中文字幕永久第一页 | 久久精品男人资源 | 亚洲欧美日韩动漫一区二区在线 | 在线播放国产精品三级 |