1.類加載的過程
1.類的加載是指把類的.class 文件中的數(shù)據(jù)讀入到內(nèi)存中,通常是創(chuàng)建一個字節(jié)數(shù)組讀入.class 文件,然后產(chǎn)生與所加載類對應的 Class 對象
2.當類被加載后就進入連接階段翁巍,這一階段包括驗證狡忙、準備(為靜態(tài)變量分配內(nèi)存并設置默認的初始值)和解析(將符號引用替換為直接引用)三個步驟
3.最后 JVM 對類進行初始化祟绊,包括:1)如果類存在直接的父類并且這個類還沒有被初始化燎竖,那么就先初始化父類;2)如果類中存在初始化語句要销,就依次執(zhí)行這些初始化語句构回。
2.簡述JVM
(1)JVM粗略分為三個部分:類加載器(ClassLoader),運行時數(shù)據(jù)區(qū)和執(zhí)行引擎疏咐。
(2)類加載器:加載程序中的類和接口纤掸,為他們賦予唯一的名字。
(3)執(zhí)行引擎:執(zhí)行字節(jié)碼浑塞,執(zhí)行本地方法借跪。
(4)運行時數(shù)據(jù)區(qū):
- 方法區(qū)(線程共享)
- 堆(線程共享)
- 虛擬機棧(線程私有)
- 本地方法棧(線程私有)
- 程序計數(shù)寄存器(線程私有)
3.內(nèi)存中棧、堆和方法區(qū)的用法
棧:基本數(shù)據(jù)類型變量酌壕、對象的引用掏愁、函數(shù)調(diào)用的現(xiàn)場保存歇由;
堆:new關鍵字和構(gòu)造器創(chuàng)建的對象,堆是垃圾回收器管理的主要區(qū)域果港;
方法區(qū):jvm加載的類信息沦泌、常量、靜態(tài)變量辛掠、JIT編譯器編譯后的代碼谢谦、常量池(常量池是方法區(qū)的一部分);
程序計數(shù)寄存器:每一個線程都會有一個程序計數(shù)寄存器萝衩,它也是在線程創(chuàng)建是建立的回挽,寄存器的內(nèi)容指向下一個將被執(zhí)行的地址。
4.垃圾回收算法
(1)引用計數(shù)法
原理是猩谊,一個對象增加一個引用就會計數(shù)加一千劈,減少一個引用就會減一,最后只會回收計數(shù)為0的對象预柒。
(2)標記清除
分為兩個階段队塘,第一階段從根節(jié)點開始標記每一個被引用的對象,第二階段宜鸯,清除所有未被標記的對象憔古。
(3)復制
把堆空間平均分為兩部分,把引用的對象復制到同一個空間里淋袖,然后清除另一個空間里所有的對象鸿市。
(4)標記整理
先從根節(jié)點開始標記被引用的對象,刪除所有未被標記的對象即碗,然后再把剩余對象整理到一個空間里依次排放焰情,避免了空間碎片。