導航:首頁 > 編程語言 > java載入類的過程

java載入類的過程

發布時間:2025-04-07 10:13:36

『壹』 13道常見的 JVM面試題

  1. 類載入過程

    • 類載入器按全限定名稱載入class文件。
    • 載入:讀取class文件到內存中。
    • 驗證:檢查class文件的魔數、版本號等。
    • 准備:為靜態變數分配內存並設置初始值。
    • 解析:將符號引用轉化為直接引用。
    • 初始化:執行靜態變數初始化和靜態代碼塊。
  2. java內存模型

    • 定義主內存工作內存
    • 主內存存儲全局變數。
    • 工作內存存放線程變數。
  3. 內存區域

    • 方法區:存儲類信息。
    • :對象存儲區域。
    • 虛擬機棧:存儲線程局部變數。
    • 本地方法棧:調用native方法時使用。
    • 程序計數器:記錄當前線程執行的位置。
    • 運行時常量池:存儲編譯時的常量信息。
  4. 堆與棧的區別

    • :用於對象存儲,線程共享。
    • :存儲方法幀和局部變數,線程獨享。
    • 對象在堆上分配,棧上保存對象的引用。
  5. GC流程

    • 垃圾收集器自動管理內存。
    • 包括新生代和老年代的分配、對象移動和垃圾回收。
  6. 雙親委派模型

    • 類載入器遵循從父載入器到子載入器的策略。
    • 防止內存中出現重復類。
    • 打破雙親委派模型需重寫loadClass和findClass方法。
  7. JVM參數

    • 包括內存初始大小、最大內存。
    • 新生代大小設置。
    • 棧大小。
    • 垃圾回收器和收集參數設置。
  8. 引用類型

    • 強引用:常駐內存。
    • 軟引用:用於緩存,內存不足時會被回收。
    • 弱引用:對象存活時存在,垃圾回收時會被回收。
    • 虛引用:用於跟蹤對象被回收的時間。
  9. 垃圾回收演算法

    • 標記清除:標記無用對象並清除。
    • 復制:將存活對象復制到另一塊內存區域。
    • 標記整理:標記無用對象並整理存活對象。
    • 分代收集:針對不同代使用不同的演算法。
  10. 垃圾回收器

    • 多種回收器如串列並行並發等。
    • 針對不同內存區域和對象特性進行管理。
  11. 內存回收

    • 程序計數器和棧內存隨線程結束而回收。
    • 判斷對象存活通過引用計數可達性分析
  12. GC監控

    • 使用jconsolejvisualvm等工具監控內存使用情況。
  13. 內存錯誤處理

    • OutOfMemoryError:調整堆大小、permSize等參數。
    • StackOverflowError:避免遞歸過深,改用循環或增大棧大小。

『貳』 java中類載入器是怎麼工作的

JVM將類載入過程分為三個步驟:裝載(Load),鏈接(Link)和初始化(Initialize)
鏈接又分為三個步驟,驗證、准備、解析
1) 裝載:查找並載入類的二進制數據;
2)鏈接:
驗證:確保被載入類的正確性;
准備:為類的靜態變數分配內存,並將其初始化為默認值;
解析:把類中的符號引用轉換為直接引用;
3)初始化:為類的靜態變數賦予正確的初始值;
那為什麼我要有驗證這一步驟呢?首先如果由編譯器生成的class文件,它肯定是符合JVM位元組碼格式的,但是萬一有高手自己寫一個class文件,讓JVM載入並運行,用於惡意用途,就不妙了,因此這個class文件要先過驗證這一關,不符合的話不會讓它繼續執行的,也是為了安全考慮吧。
准備階段和初始化階段看似有點牟盾,其實是不牟盾的,如果類中有語句:private static int a = 10,它的執行過程是這樣的,首先位元組碼文件被載入到內存後,先進行鏈接的驗證這一步驟,驗證通過後准備階段,給a分配內存,因為變數a是static的,所以此時a等於int類型的默認初始值0,即a=0,然後到解析(後面在說),到初始化這一步驟時,才把a的真正的值10賦給a,此時

『叄』 java類的載入過程是怎麼樣的

類載入到jvm需要經歷如下幾個過程:

一.載入
通過類的全限定名轉換為二進制位元組流,在jvm堆中生成代表這個Class的對象,作為方法區域的方法入口.

二.連接
1.驗證:驗證class的位元組流是否對jvm虛擬機造成傷害,是否符合jvm的規范,這里包含幾個驗證.
2.准備:為類的static變數賦初始值,其中不包含類其它實例成員的初始化.
3.解析:將常量池內的符號引用替換成直接引用
三.初始化
這里是static{}塊,構造函數,代碼塊{}的執行過程.
四.使用
對象的屬性,方法等調用操作.
五.銷毀
jvm通過確定對象沒有引用後進行gc操作.

閱讀全文

與java載入類的過程相關的資料

熱點內容
switch字元串java 瀏覽:969
2021年畢業二本程序員月薪 瀏覽:892
android餅圖控制項 瀏覽:138
下載完課件怎麼解壓 瀏覽:300
荊州源碼名片 瀏覽:122
phpdemo視頻 瀏覽:205
程序員轉行做大數據 瀏覽:547
真我t1如何添加加密nfc 瀏覽:605
股市復盤系統源碼 瀏覽:524
我的世界如何不要鑽石創造伺服器 瀏覽:533
虛擬機裡面的文件重命名mv命令 瀏覽:20
安卓什麼電話系統最好 瀏覽:581
進入雲伺服器輸入什麼密碼 瀏覽:328
java微信下載手機版 瀏覽:73
php代碼分析工具 瀏覽:673
泰坦隕落2xbox如何換伺服器 瀏覽:755
安卓手機如何用數據線連接投影 瀏覽:380
java類的實例變數的區別 瀏覽:714
千年源碼端多少錢 瀏覽:252
每日英語聽力app怎麼顯示字幕 瀏覽:674