欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java之jvm加載器例舉

 更新時(shí)間:2021年03月03日 15:01:11   作者:小妮淺淺  
在本篇文章里小編給大家介紹了關(guān)于java之jvm加載器例舉內(nèi)容,對(duì)此有需要的程序員朋友們可以參考下。

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

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

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

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

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

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

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

4、Custom ClassLoader (用戶(hù)加載器)

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

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

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

驗(yàn)證:驗(yàn)證階段用于檢驗(yàn)被加載的類(lèi)是否有正確的內(nèi)部結(jié)構(gòu),并和其他類(lèi)協(xié)調(diào)一致。Java是相對(duì)C++語(yǔ)言是安全的語(yǔ)言,例如它有C++不具有的數(shù)組越界的檢查。這本身就是對(duì)自身安全的一種保護(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)證,符號(hào)引用驗(yàn)證。

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

  1. 文件格式驗(yàn)證:主要驗(yàn)證字節(jié)流是否符合Class文件格式規(guī)范,并且能被當(dāng)前的虛擬機(jī)加載處理。例如:主,次版本號(hào)是否在當(dāng)前虛擬機(jī)處理的范圍之內(nèi)。常量池中是否有不被支持的常量類(lèi)型。指向常量的中的索引值是否存在不存在的常量或不符合類(lèi)型的常量。
  2. 元數(shù)據(jù)驗(yàn)證:對(duì)字節(jié)碼描述的信息進(jìn)行語(yǔ)義的分析,分析是否符合java的語(yǔ)言語(yǔ)法的規(guī)范。
  3. 字節(jié)碼驗(yàn)證:最重要的驗(yàn)證環(huán)節(jié),分析數(shù)據(jù)流和控制,確定語(yǔ)義是合法的,符合邏輯的。主要的針對(duì)元數(shù)據(jù)驗(yàn)證后對(duì)方法體的驗(yàn)證。保證類(lèi)方法在運(yùn)行時(shí)不會(huì)有危害出現(xiàn)。
  4. 符號(hào)引用驗(yàn)證:主要是針對(duì)符號(hào)引用轉(zhuǎn)換為直接引用的時(shí)候,是會(huì)延伸到第三解析階段,主要去確定訪問(wèn)類(lèi)型等涉及到引用的情況,主要是要保證引用一定會(huì)被訪問(wèn)到,不會(huì)出現(xiàn)類(lèi)等無(wú)法訪問(wèn)的問(wèn)題。

到此這篇關(guān)于java之jvm加載器例舉的文章就介紹到這了,更多相關(guān)java之jvm加載器有幾種內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java中對(duì)象的強(qiáng)、軟、弱、虛四種引用詳解

    java中對(duì)象的強(qiáng)、軟、弱、虛四種引用詳解

    這篇文章主要介紹了java中對(duì)象的強(qiáng)、軟、弱、虛四種引用詳解,對(duì)象的引用分為4種,分別是強(qiáng)引用>軟引用>弱引用>虛引用,程序員可以通過(guò)不同的引用控制對(duì)象的生命周期,方便垃圾回收,使程序更加靈活的控制對(duì)象生命周期,需要的朋友可以參考下
    2023-09-09
  • SpringBoot啟動(dòng)報(bào)錯(cuò)屬性循環(huán)依賴(lài)報(bào)錯(cuò)問(wèn)題的解決

    SpringBoot啟動(dòng)報(bào)錯(cuò)屬性循環(huán)依賴(lài)報(bào)錯(cuò)問(wèn)題的解決

    這篇文章主要介紹了SpringBoot啟動(dòng)報(bào)錯(cuò)屬性循環(huán)依賴(lài)報(bào)錯(cuò)問(wèn)題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 使用java實(shí)現(xiàn)手機(jī)短信驗(yàn)證全過(guò)程

    使用java實(shí)現(xiàn)手機(jī)短信驗(yàn)證全過(guò)程

    這篇文章主要介紹了使用java實(shí)現(xiàn)手機(jī)短信驗(yàn)證全過(guò)程,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Springboot整合mqtt服務(wù)的示例代碼

    Springboot整合mqtt服務(wù)的示例代碼

    MQTT是一個(gè)基于客戶(hù)端-服務(wù)器的消息發(fā)布/訂閱傳輸協(xié)議。MQTT協(xié)議是輕量、簡(jiǎn)單、開(kāi)放和易于實(shí)現(xiàn)的,這些特點(diǎn)使它適用范圍非常廣泛。本文為大家分享了Springboot整合mqtt服務(wù)的示例代碼,需要的可以參考一下
    2022-03-03
  • Java基礎(chǔ) Servlet監(jiān)聽(tīng)器詳解

    Java基礎(chǔ) Servlet監(jiān)聽(tīng)器詳解

    這篇文章主要介紹了Java基礎(chǔ) Servlet監(jiān)聽(tīng)器詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 利用Java工具類(lèi)Hutool實(shí)現(xiàn)驗(yàn)證碼校驗(yàn)功能

    利用Java工具類(lèi)Hutool實(shí)現(xiàn)驗(yàn)證碼校驗(yàn)功能

    這篇文章主要介紹了利用Java工具類(lèi)Hutool實(shí)現(xiàn)驗(yàn)證碼校驗(yàn)功能,利用Hutool實(shí)現(xiàn)驗(yàn)證碼校驗(yàn),校驗(yàn)的Servlet與今天的第一篇是一樣的,唯一就是驗(yàn)證碼的生成是不一樣的,利用Hutool生成驗(yàn)證碼更快捷.需要的朋友可以參考下
    2022-10-10
  • Java中類(lèi)的加載順序執(zhí)行結(jié)果

    Java中類(lèi)的加載順序執(zhí)行結(jié)果

    這篇文章主要介紹了Java中類(lèi)的加載順序執(zhí)行結(jié)果的相關(guān)資料,需要的朋友可以參考下
    2017-10-10
  • spring?boot集成loback日志配置的示例代碼

    spring?boot集成loback日志配置的示例代碼

    這篇文章主要介紹了spring?boot集成loback日志配置的示例代碼,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • SpringMVC中控制器返回JSON數(shù)據(jù)的實(shí)現(xiàn)

    SpringMVC中控制器返回JSON數(shù)據(jù)的實(shí)現(xiàn)

    本文主要介紹了SpringMVC中控制器返回JSON數(shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java在Word中插入上標(biāo)和下標(biāo)的實(shí)現(xiàn)方法

    Java在Word中插入上標(biāo)和下標(biāo)的實(shí)現(xiàn)方法

    在某些情況下,你可能需要在Microsoft?Word中插入上標(biāo)和下標(biāo)。例如,當(dāng)你正在創(chuàng)建一個(gè)涉及科學(xué)公式的學(xué)術(shù)文件時(shí),在這篇文章中,你將學(xué)習(xí)如何使用Spire.Doc?for?Java庫(kù)在Word文檔中插入上標(biāo)和下標(biāo),需要的朋友可以參考下
    2022-10-10

最新評(píng)論