搜尋
首頁Javajava教程Java類別載入過程的詳細介紹

這篇文章帶給大家的內容是關於Java類別載入過程的詳細介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

Java檔案從編碼到完成最終執行的過程:

  1. 編譯:Javac 把Java檔案編譯成.class檔案
  2. 執行:把.class檔案交給JVM運行

類別的載入過程

JVM虛擬機把.class檔案中類別資訊載入進內存,並進行解析產生對應的class物件的過程。 JVM不是一開始就把所有的類別都加載進記憶體中,而是只有第一次遇到某個需要運行的類別時才會加載,並且只加載一次。

Java類別載入過程的詳細介紹

載入

把class字節碼檔案從各個來源透過類別載入器載入到記憶體中
JVM要完成三件事

  1. 透過一個類別的全限定名稱來取得定義此類的二進位位元組流。
  2. 靜態儲存結構- > 方法區的執行時期資料結構
  3. 在Java堆中產生對應類別的java.lang.Class對象,作為方法區存取這些資料的存取入口。

類別載入器

  • 啟動類別載入器
  • 擴充類別載入器
  • 應用類別載入器
  • 自訂類別載入器

連線

將java類別的二進位程式碼合併到JVM的運行狀態之中的程序

驗證

保證載入的位元組流符合虛擬機器規範,不會造成安全錯誤

驗證分類

  • 檔案格式的驗證,例如常數中是否有不被支持的常數?文件中是否有不規範的或附加的其他資訊
  • 元資料的驗證,例如該類別是否繼承了被final修飾的類別?類別中的字段,方法是否與父類別衝突?是否出現了不合理的重載?
  • 字節碼的驗證,保證程式語意的合理性,例如要保證類型轉換的合理性。
  • 符號引用的驗證,例如校驗符號引用中透過全限定名稱是否能夠找到對應的類別?校驗符號引用中的存取性(private,public等)是否可被目前類別存取?

準備

為類別變數(注意,不是實例變數)分配內存,並且賦予初步值(Java虛擬機器根據不同變數類型的預設初始值)

預設初始值

  • 8種基本型別的初步值,預設為0
  • 引用型別的初步值則為null
  • 常數的初步值即程式碼中設定的值
  • final static tmp = 456

#解析

#常數池內的符號引用替換為直接引用的過程

#符號引用:一個字串,但是這個字串給了一些能夠唯一性識別一個方法,一個變量,一個類別的相關資訊

直接引用:可以理解為一個記憶體位址,或者一個偏移量

舉個例子來說,現在呼叫方法hello(),這個方法的位址是1234567,那麼hello就是符號引用,1234567就是直接引用

#解析階段,虛擬機會把所有的類別名,方法名,字段名這些符號引用替換為具體的記憶體位址或偏移量,也就是直接引用

初始化

對類別變數(static修飾的變數或語句)初始化,是執行類別建構器的過程

初始化過程

  • 初始化一個類別的時候,其父類別尚未初始化,則優先初始化其父類別
    - 同時包含多個靜態變數和靜態程式碼區塊,則依照自上而下的順序依序執行
#

以上是Java類別載入過程的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:博客园。如有侵權,請聯絡admin@php.cn刪除
是否有任何威脅或增強Java平台獨立性的新興技術?是否有任何威脅或增強Java平台獨立性的新興技術?Apr 24, 2025 am 12:11 AM

新興技術對Java的平台獨立性既有威脅也有增強。 1)雲計算和容器化技術如Docker增強了Java的平台獨立性,但需要優化以適應不同雲環境。 2)WebAssembly通過GraalVM編譯Java代碼,擴展了其平台獨立性,但需與其他語言競爭性能。

JVM的實現是什麼,它們都提供了相同的平台獨立性?JVM的實現是什麼,它們都提供了相同的平台獨立性?Apr 24, 2025 am 12:10 AM

不同JVM實現都能提供平台獨立性,但表現略有不同。 1.OracleHotSpot和OpenJDKJVM在平台獨立性上表現相似,但OpenJDK可能需額外配置。 2.IBMJ9JVM在特定操作系統上表現優化。 3.GraalVM支持多語言,需額外配置。 4.AzulZingJVM需特定平台調整。

平台獨立性如何降低發展成本和時間?平台獨立性如何降低發展成本和時間?Apr 24, 2025 am 12:08 AM

平台獨立性通過在多種操作系統上運行同一套代碼,降低開發成本和縮短開發時間。具體表現為:1.減少開發時間,只需維護一套代碼;2.降低維護成本,統一測試流程;3.快速迭代和團隊協作,簡化部署過程。

Java的平台獨立性如何促進代碼重用?Java的平台獨立性如何促進代碼重用?Apr 24, 2025 am 12:05 AM

Java'splatformindependencefacilitatescodereusebyallowingbytecodetorunonanyplatformwithaJVM.1)Developerscanwritecodeonceforconsistentbehavioracrossplatforms.2)Maintenanceisreducedascodedoesn'tneedrewriting.3)Librariesandframeworkscanbesharedacrossproj

您如何在Java應用程序中對平台特定問題進行故障排除?您如何在Java應用程序中對平台特定問題進行故障排除?Apr 24, 2025 am 12:04 AM

要解決Java應用程序中的平台特定問題,可以採取以下步驟:1.使用Java的System類查看系統屬性以了解運行環境。 2.利用File類或java.nio.file包處理文件路徑。 3.根據操作系統條件加載本地庫。 4.使用VisualVM或JProfiler優化跨平台性能。 5.通過Docker容器化確保測試環境與生產環境一致。 6.利用GitHubActions在多個平台上進行自動化測試。這些方法有助於有效地解決Java應用程序中的平台特定問題。

JVM中的類加載程序子系統如何促進平台獨立性?JVM中的類加載程序子系統如何促進平台獨立性?Apr 23, 2025 am 12:14 AM

類加載器通過統一的類文件格式、動態加載、雙親委派模型和平台無關的字節碼,確保Java程序在不同平台上的一致性和兼容性,實現平台獨立性。

Java編譯器會產生特定於平台的代碼嗎?解釋。Java編譯器會產生特定於平台的代碼嗎?解釋。Apr 23, 2025 am 12:09 AM

Java編譯器生成的代碼是平台無關的,但最終執行的代碼是平台特定的。 1.Java源代碼編譯成平台無關的字節碼。 2.JVM將字節碼轉換為特定平台的機器碼,確保跨平台運行但性能可能不同。

JVM如何處理不同操作系統的多線程?JVM如何處理不同操作系統的多線程?Apr 23, 2025 am 12:07 AM

多線程在現代編程中重要,因為它能提高程序的響應性和資源利用率,並處理複雜的並發任務。 JVM通過線程映射、調度機制和同步鎖機制,在不同操作系統上確保多線程的一致性和高效性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),