国产精品无码一区二区三区太,亚洲一线产区二线产区区别,欧美A区,人妻jealousvue人妻

×

虛擬機(jī)類(lèi)加載

  • 作者:新網(wǎng)
  • 來(lái)源:新網(wǎng)
  • 瀏覽:100
  • 2018-05-15 14:27:40

什么叫做類(lèi)加載?虛擬機(jī)需要把類(lèi)的數(shù)據(jù)從Class文件加載到內(nèi)存中,并對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),轉(zhuǎn)換解析初始化。最終成為虛擬機(jī)認(rèn)識(shí)的java類(lèi)型的過(guò)程就叫做類(lèi)加載。

   什么叫做類(lèi)加載?虛擬機(jī)需要把類(lèi)的數(shù)據(jù)從Class文件加載到內(nèi)存中,并對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),轉(zhuǎn)換解析初始化。最終成為虛擬機(jī)認(rèn)識(shí)的java類(lèi)型的過(guò)程就叫做類(lèi)加載。

2-160Q0111130B2.jpg

<div>  類(lèi)加載生命周期:類(lèi)加載到虛擬機(jī)中到最后卸載:加載-驗(yàn)證-準(zhǔn)備-解析-初始化-使用-卸載七個(gè)階段。
  加載是類(lèi)加載的第一個(gè)階段,虛擬機(jī)需要完成三件事。
  1:通過(guò)類(lèi)的全路徑獲取獲取定義此類(lèi)的二進(jìn)制流。
  2:把這個(gè)字節(jié)流的靜態(tài)存儲(chǔ)結(jié)構(gòu)轉(zhuǎn)換為方法區(qū)的運(yùn)行運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu)。
  3:在內(nèi)存中生成一個(gè)代表這個(gè)類(lèi)的java.lang.Class對(duì)象。作為方法區(qū)訪問(wèn)這個(gè)類(lèi)數(shù)據(jù)結(jié)構(gòu)的入口
  由于規(guī)范并沒(méi)有嚴(yán)格的要求所以實(shí)現(xiàn)的方式就更加靈活了。我們可以通過(guò)jar,ear,war包等格式中獲取也可以通過(guò)JSP生成class文件、反射等。
  驗(yàn)證:就是字面意思驗(yàn)證class文件是否是安全的。
  1、文件格式的驗(yàn)證:是否魔數(shù)開(kāi)頭,是否包含版本信息。當(dāng)前虛擬機(jī)是否支持當(dāng)前版本。常量池中的數(shù)據(jù)是否存在異常等
  2、元數(shù)據(jù)驗(yàn)證:主要針對(duì)類(lèi)和類(lèi)的屬性。驗(yàn)證字節(jié)碼的語(yǔ)義是否正確,是否非法繼承等。
  3、字節(jié)碼驗(yàn)證:主要針對(duì)方法內(nèi)部:,驗(yàn)證語(yǔ)義、邏輯等
  4、符號(hào)引用驗(yàn)證:驗(yàn)證符號(hào)引用中全路徑能否找到對(duì)應(yīng)的類(lèi)。指定類(lèi)中是否包含使用的方法、字段。當(dāng)前調(diào)用方法是否允許調(diào)用等
  準(zhǔn)備階段:分配類(lèi)變量?jī)?nèi)存(方法區(qū)),并初始化需要注意當(dāng)前初始化僅僅為static修飾的變量比如 public static int val = 2;
    將被初始化:需要注意的是初始化的結(jié)果是0。但是也并不是任何情況都是變量的初始化。
   解析過(guò)程就是上面提過(guò)的符號(hào)引用轉(zhuǎn)換為直接引用。解析過(guò)程中也許會(huì)觸發(fā)新的類(lèi)加載。
  類(lèi)的初始化是類(lèi)加載的最后一步。在準(zhǔn)備的階段變量已經(jīng)初始化過(guò)了系統(tǒng)默認(rèn)的值,單前階段則為程序中賦予的值。
  提過(guò)虛擬機(jī)來(lái)看當(dāng)前階段執(zhí)行的為類(lèi)構(gòu)造器();它是由編譯器自動(dòng)收集類(lèi)變量賦值動(dòng)作和靜態(tài)語(yǔ)句塊中的語(yǔ)句合并產(chǎn)生的。收集的順序?yàn)樵次募谐霈F(xiàn)的順序。靜態(tài)語(yǔ)句塊只能訪問(wèn)到定義在靜態(tài)塊之前的變量。定義在之后的可以賦值,但是不可以訪問(wèn)。
  它不需要顯示的調(diào)用父類(lèi)的構(gòu)造器。虛擬機(jī)會(huì)保證在子類(lèi)之前執(zhí)行。

免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請(qǐng)發(fā)送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

免費(fèi)咨詢(xún)獲取折扣

Loading