溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java之jvm加載器使用方法

發(fā)布時(shí)間:2021-03-03 17:14:19 來源:億速云 閱讀:131 作者:TREX 欄目:開發(fā)技術(shù)

這篇文章主要講解了“java之jvm加載器使用方法”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“java之jvm加載器使用方法”吧!

在java的學(xué)習(xí)中,對于jvm模塊我們會(huì)不斷補(bǔ)充一些知識(shí)點(diǎn),畢竟jvm是比較重要的一個(gè)組成部分。本篇圍繞jvm加載器展開介紹,在加載類的時(shí)候,我們的加載器會(huì)逐個(gè)進(jìn)行工作,在具體的加載器類型上,想必大家還不是很清楚。下面我們就java之jvm加載器的4中類型帶來介紹。

1、Bootstrap ClassLoader (引導(dǎo)類加載器)

負(fù)責(zé)加載$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++實(shí)現(xiàn)的核心庫,也就是JVM調(diào)用每個(gè)系統(tǒng)的API實(shí)現(xiàn)系統(tǒng)功能,實(shí)現(xiàn)跨平臺(tái)的主要模塊,不是ClassLoader子類。開發(fā)者不能直接使用。

2、Extension ClassLoader (擴(kuò)展類加載器)

負(fù)責(zé)加載java平臺(tái)中擴(kuò)展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目錄下的jar包,開發(fā)者可以直接使用。

3、Application ClassLoader (應(yīng)用加載)

負(fù)責(zé)記載classpath中指定的jar包及目錄中class。根據(jù)需要,通過class的全限定名來加載類,可以通過classLoader.getSystemClassLoader()來獲取它。

4、Custom ClassLoader (用戶加載器)

屬于應(yīng)用程序根據(jù)自身需要自定義的ClassLoader,繼承java.lang.classLoader類。如tomcat、jboss都會(huì)根據(jù)j2ee規(guī)范自行實(shí)現(xiàn)ClassLoader。

實(shí)例擴(kuò)展:

根類加載器(BootstrapLoader)

package jvmTest;

import java.net.URL;

import sun.misc.Launcher;

public class Boot {
  public static void main(String[] args) {
    /*
     * 這里有可能報(bào)錯(cuò) Access restriction: The type 'Launcher' is not API
     * 只需要將 全局屬性Project>preferences>java>Compiler>Errors/Warnings>
     * 把右側(cè)的【Deprecated and restricted API>Forbidden reference的Error】置為【W(wǎng)arning】.
     */
    URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs();
    for(int i = 0; i < urls.length; i++) {
      System.out.println(urls[i].toExternalForm());
    }
  }
}

當(dāng)類被加載之后,系統(tǒng)為之生成一個(gè)對應(yīng)的Class對象,接著將會(huì)進(jìn)入連接階段,連接階段負(fù)責(zé)把類的二進(jìn)制數(shù)據(jù)合并到JRE中。類連接又可分為如下3個(gè)階段。

驗(yàn)證:驗(yàn)證階段用于檢驗(yàn)被加載的類是否有正確的內(nèi)部結(jié)構(gòu),并和其他類協(xié)調(diào)一致。Java是相對C++語言是安全的語言,例如它有C++不具有的數(shù)組越界的檢查。這本身就是對自身安全的一種保護(hù)。驗(yàn)證階段是Java非常重要的一個(gè)階段,它會(huì)直接的保證應(yīng)用是否會(huì)被惡意入侵的一道重要的防線,越是嚴(yán)謹(jǐn)?shù)尿?yàn)證機(jī)制越安全。驗(yàn)證的目的在于確保Class文件的字節(jié)流中包含信息符合當(dāng)前虛擬機(jī)要求,不會(huì)危害虛擬機(jī)自身安全。其主要包括四種驗(yàn)證,文件格式驗(yàn)證,元數(shù)據(jù)驗(yàn)證,字節(jié)碼驗(yàn)證,符號引用驗(yàn)證。

四種驗(yàn)證做進(jìn)一步說明:

  1. 文件格式驗(yàn)證:主要驗(yàn)證字節(jié)流是否符合Class文件格式規(guī)范,并且能被當(dāng)前的虛擬機(jī)加載處理。例如:主,次版本號是否在當(dāng)前虛擬機(jī)處理的范圍之內(nèi)。常量池中是否有不被支持的常量類型。指向常量的中的索引值是否存在不存在的常量或不符合類型的常量。

  2. 元數(shù)據(jù)驗(yàn)證:對字節(jié)碼描述的信息進(jìn)行語義的分析,分析是否符合java的語言語法的規(guī)范。

  3. 字節(jié)碼驗(yàn)證:最重要的驗(yàn)證環(huán)節(jié),分析數(shù)據(jù)流和控制,確定語義是合法的,符合邏輯的。主要的針對元數(shù)據(jù)驗(yàn)證后對方法體的驗(yàn)證。保證類方法在運(yùn)行時(shí)不會(huì)有危害出現(xiàn)。

  4. 符號引用驗(yàn)證:主要是針對符號引用轉(zhuǎn)換為直接引用的時(shí)候,是會(huì)延伸到第三解析階段,主要去確定訪問類型等涉及到引用的情況,主要是要保證引用一定會(huì)被訪問到,不會(huì)出現(xiàn)類等無法訪問的問題。

感謝各位的閱讀,以上就是“java之jvm加載器使用方法”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對java之jvm加載器使用方法這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI