虛擬機(jī)類加載機(jī)制
一. 加載的時(shí)機(jī)
(1)new getstatic putstatic invokestatic 對(duì)一個(gè)類進(jìn)行 實(shí)例化對(duì)象 讀取或者設(shè)置靜態(tài)屬性 調(diào)用靜態(tài)方法
(2)反射
(3)加載一個(gè)類時(shí) 發(fā)現(xiàn)其父類沒有初始化
(4)程序入口的類
(5) 動(dòng)態(tài)語言支持
二. 類加載的過程
- 加載
- 通過類的全限定名獲取二進(jìn)制流
- 將流所代表的靜態(tài)存儲(chǔ)結(jié)構(gòu) 轉(zhuǎn)化為方法區(qū)的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu)
- 在方法區(qū)生成一個(gè)Class類型對(duì)象 用于訪問這個(gè)類的各種數(shù)據(jù)
- 驗(yàn)證
文件格式 元數(shù)據(jù) 字節(jié)碼 符號(hào)引用 - 準(zhǔn)備
為類變量分配內(nèi)存 并設(shè)置初始值的階段 - 解析
符號(hào)引用轉(zhuǎn)化為直接引用的過程
符號(hào)引用: 一組符號(hào)來描述所引用的目標(biāo) 目標(biāo)可以沒加載在內(nèi)存中
直接引用: 直接指向目標(biāo)的指針 相對(duì)偏移量 內(nèi)存中已經(jīng)存在 - 初始化
執(zhí)行cinit方法
cinit 是由 靜態(tài)變量賦值語句 和 靜態(tài)代碼塊合并起來的 - 使用
- 卸載