• <samp id="mz5ne"><acronym id="mz5ne"></acronym></samp>
      <ol id="mz5ne"></ol>
    1. <samp id="mz5ne"></samp>
      <mark id="mz5ne"></mark>

        <fieldset id="mz5ne"></fieldset>

        免费看又黄又无码的网站_久久久高清国产免费观看_亚洲一区二区三区在线免费观看_免费欧洲美女a视频一级毛片_日本最新免费二区三区

        ×

        深入理解JAVA虛擬機

        • 作者:新網(wǎng)
        • 來源:新網(wǎng)
        • 瀏覽:100
        • 2018-05-11 15:05:00

        對于Java,我們首先需要知道Java的體系結(jié)構(gòu),總體來說,它由4部分組成1、java程序設(shè)計語言:這就是我們通常編碼時寫的代碼。2、java class文件:源碼編譯后的二進制字節(jié)碼文件,后綴名.class的文件。3、java API:就是JDK中自帶的那些java代碼,其介于開發(fā)人員編寫的代碼與底層操作系統(tǒng)資源之間的中間層。4、java虛擬機:用來裝載class文件并且執(zhí)行其中的字節(jié)碼。

           對于Java,我們首先需要知道Java的體系結(jié)構(gòu),總體來說,它由4部分組成1、java程序設(shè)計語言:這就是我們通常編碼時寫的代碼。2、java class文件:源碼編譯后的二進制字節(jié)碼文件,后綴名.class的文件。3、java API:就是JDK中自帶的那些java代碼,其介于開發(fā)人員編寫的代碼與底層操作系統(tǒng)資源之間的中間層。4、java虛擬機:用來裝載class文件并且執(zhí)行其中的字節(jié)碼。

        458PICJ58PICAga_1024.jpg

        <div>  一、Java虛擬機
          前面講到,java虛擬機的主要任務(wù)就是加載class文件并且執(zhí)行其中的字節(jié)碼,其與Java API合在一起就是我們所謂的“Java 平臺”,或者"Java運行時環(huán)境"。
          Java虛擬機主要由類裝載器子系統(tǒng)和字節(jié)碼執(zhí)行引擎兩部分組成。
          1、類裝載器子系統(tǒng),顧名思義,就是用來負(fù)責(zé)定位并加載class文件的,目前依據(jù)繼承層次主要分為:啟動類裝載器(BootstrapClassLoader)、標(biāo)準(zhǔn)擴展類裝載器(ExtClassLoader)、類路徑類裝載器(AppClassLoader,也叫系統(tǒng)類裝載器)以及用戶自定義類裝載器。類裝載器裝載類時,都是在JVM第一次需要執(zhí)行該類字節(jié)碼時發(fā)生,即我們所謂的"延遲加載"機制。
          2、字節(jié)碼執(zhí)行引擎,即將Java字節(jié)碼翻譯為本地機器碼的模塊。目前執(zhí)行引擎主要分為四類:
          (1) 一次性解釋字節(jié)碼:即為當(dāng)JVM執(zhí)行某段字節(jié)碼時,由執(zhí)行引擎將其翻譯為本地機器碼,當(dāng)再次執(zhí)
          行到該段字節(jié)碼時,再次由執(zhí)行引擎翻譯為本地機器碼。
          (2) JIT(即時編譯器):在(1)的基礎(chǔ)上,將翻譯后的本地機器碼緩存起來,當(dāng)再次執(zhí)行時,就不需要再次
          翻譯了。當(dāng)然,該種執(zhí)行引擎會占用更多的內(nèi)存。
          (3) 自適應(yīng)優(yōu)化器:JVM會監(jiān)視所有字節(jié)碼的執(zhí)行頻率,將那些常用的字節(jié)碼所對應(yīng)的本地機器碼緩存
          起來。
          (4) 硬件芯片:由本地方法執(zhí)行Java字節(jié)碼,但是這些本地方法是被固化在芯片中。
          二、類裝載器
          前面已經(jīng)提到過,Java類裝載器主要分為四種:啟動類裝載器(BootstrapClassLoader)、標(biāo)準(zhǔn)擴展類裝載器(ExtClassLoader)、類路徑類裝載器(AppClassLoader,也叫系統(tǒng)類裝載器)以及用戶自定義類裝載器。那么這四類不同的裝載器區(qū)別是什么?這里先不贅述。
          但是這里比較重要的一點就是,JVM對不同的類裝載器[對象]定義了不同的命名空間,而且不同命名空間里的類對象是彼此不可見的,不能彼此相互訪問(除非應(yīng)用程序顯示地要求這么做)。那么這句話到底怎么理解呢?假如類裝載器A(對象)裝載了類Hello A,并且類裝載器B(對象)也裝載了類Hello B,那么其實對于這兩個Hello類對象而言,他們并不知道對方的存在,更不能相互訪問,因為他們屬于兩個不同的命名空間A和B。而且,對于JVM來說,這兩個Hello類對象也是屬于兩個完全不同的類對象,因為對于JVM來說,只能由 類裝載器[對象](命名空間)和類完全限定名 才能唯一標(biāo)識一個類對象。
          另外,需要我們記住的一點就是,同時依然是上面一句話的延伸,即:類及該類所引用的其他類必然屬于同一個命名空間,即該類所引用的其他類必然會被裝載第一個類的裝載器[對象]來裝載。比如類Hello A被裝載器A裝載到了JVM中,但是該Hello A類同時引用了類Hello B,那么Hello B類也同時會被裝載器A加載到JVM中,如此以來,Hello A和Hello B之間才能可見,才能相互訪問。換句通俗話來講,當(dāng)被裝載的類引用了另外一個類,那么JVM就會用裝載第一個類的裝載器[對象]來裝載被引用的類。
          如此設(shè)計的類裝載器模型,可以有效地防止不同代碼間的相互侵占,相互破壞。
          三、Java Class文件
          在Java Class文件中,字節(jié)順序是 高位在前 ,這 一點希望大家要謹(jǐn)記。
          四、Java API
          Java API的class文件天然就是與平臺相關(guān)的,其處于Java程序與本地代碼中間這一層,但是正是由于有了Java API這一層,才致使我們編寫的Java代碼是與平臺無關(guān)的。
          同時,Java API中提供了安全性模型。安全管理器正是這樣一個為應(yīng)用程序提供自定義安全策略的對象,例如,安全管理器可以禁止對本地磁盤的非法訪問。然后在Java1.2中,安全管理器被訪問控制器所取代,該類用來執(zhí)行棧檢驗,以決定是否準(zhǔn)許某種操作。

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

        免費咨詢獲取折扣

        Loading
        国产精品视频白浆免费视频_久久久高清国产免费观看_亚洲一区二区三区在线免费观看_免费欧洲美女a视频一级毛片
      1. <samp id="mz5ne"><acronym id="mz5ne"></acronym></samp>
          <ol id="mz5ne"></ol>
        1. <samp id="mz5ne"></samp>
          <mark id="mz5ne"></mark>

            <fieldset id="mz5ne"></fieldset>
            绥阳县| 富宁县| 南木林县| 盐亭县| 河南省| 临潭县| 洪湖市| 廊坊市| 莒南县| 海城市| 西平县| 拜泉县| 南丰县| 哈巴河县| 十堰市| 渝中区| 年辖:市辖区| 牡丹江市| 清苑县| 额敏县| 沂南县| 莒南县| 沽源县| 府谷县| 平舆县| 剑川县| 宜宾市| 汤原县| 姚安县| 咸宁市| 泾川县| 焦作市| 临泽县| 乌兰浩特市| 交口县| 江城| 象州县| 永善县| 天长市| 嘉荫县| 澄迈县|