• <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虛擬機(jī)

        • 作者:新網(wǎng)
        • 來源:新網(wǎng)
        • 瀏覽:100
        • 2018-05-14 10:24:35

        類加載器,顧名思義,類加載器(class loader)用來加載 Java 類到 Java 虛擬機(jī)中。一般來說,Java 虛擬機(jī)使用 Java 類的方式如下:Java 源程序(.java 文件)在經(jīng)過 Java 編譯器編譯之后就被轉(zhuǎn)換成 Java 字節(jié)代碼(.class 文件)。類加載器負(fù)責(zé)讀取 Java 字節(jié)代碼,并轉(zhuǎn)換成 java.lang.Class類的一個實例。

                類加載器,顧名思義,類加載器(class loader)用來加載 Java 類到 Java 虛擬機(jī)中。一般來說,Java 虛擬機(jī)使用 Java 類的方式如下:Java 源程序(.java 文件)在經(jīng)過 Java 編譯器編譯之后就被轉(zhuǎn)換成 Java 字節(jié)代碼(.class 文件)。類加載器負(fù)責(zé)讀取 Java 字節(jié)代碼,并轉(zhuǎn)換成 java.lang.Class類的一個實例。

        t01804c593338b31ca5.jpg

        <div>         每個這樣的實例用來表示一個 Java 類。通過此實例的 newInstance()方法就可以創(chuàng)建出該類的一個對象。實際的情況可能更加復(fù)雜,比如 Java 字節(jié)代碼可能是通過工具動態(tài)生成的,也可能是通過網(wǎng)絡(luò)下載的。基本上所有的類加載器都是 java.lang.ClassLoader類的一個實例。其實我們研究類加載器主要研究的就是類的生命周期。
          首先來了解一下jvm(java虛擬機(jī))中的幾個比較重要的內(nèi)存區(qū)域,這幾個區(qū)域在java類的生命周期中扮演著比較重要的角色:
          方法區(qū):在java的虛擬機(jī)中有一塊專門用來存放已經(jīng)加載的類信息、常量、靜態(tài)變量以及方法代碼的內(nèi)存區(qū)域,叫做方法區(qū)。
          常量池:常量池是方法區(qū)的一部分,主要用來存放常量和類中的符號引用等信息。
          堆區(qū):用于存放類的對象實例。
          棧區(qū):也叫java虛擬機(jī)棧,是由一個一個的棧幀組成的后進(jìn)先出的棧式結(jié)構(gòu),棧楨中存放方法運(yùn)行時產(chǎn)生的局部變量、方法出口等信息。當(dāng)調(diào)用一個方法時,虛擬機(jī)棧中就會創(chuàng)建一個棧幀存放這些數(shù)據(jù),當(dāng)方法調(diào)用完成時,棧幀消失,如果方法中調(diào)用了其他方法,則繼續(xù)在棧頂創(chuàng)建新的棧楨。
          類的生命周期
          當(dāng)我們編寫一個java的源文件后,經(jīng)過編譯會生成一個后綴名為class的文件,這種文件叫做字節(jié)碼文件,只有這種字節(jié)碼文件才能夠在java虛擬機(jī)中運(yùn)行,java類的生命周期就是指一個class文件從加載到卸載的全過程。一個java類的完整的生命周期會經(jīng)歷加載、連接、初始化、使用、和卸載五個階段,當(dāng)然也有在加載或者連接之后沒有被初始化就直接被使用的情況,這里我們主要來研究類加載器所執(zhí)行的部分,也就是加載,鏈接和初始化。
          下面我先簡單看一下類加載器所執(zhí)行的三部分的簡單介紹
          1、加載:查找并加載類的二進(jìn)制數(shù)據(jù)
          2、連接
          –驗證:確保被加載的類的正確性
          –準(zhǔn)備:為類的靜態(tài)變量分配內(nèi)存,并將其初始化為默認(rèn)值
          –解析:把類中的符號引用轉(zhuǎn)換為直接引用
          3、初始化:為類的靜態(tài)變量賦予正確的初始值
          從上邊我們可以看出類的靜態(tài)變量賦了兩回值。這是為什么呢?原因是,在連接過程中時為靜態(tài)變量賦值為默認(rèn)值,也就是說,只要是你定義了靜態(tài)變量,不管你開始給沒給它設(shè)置,我系統(tǒng)都為他初始化一個默認(rèn)值。到了初始化過程,系統(tǒng)就檢查是否用戶定義靜態(tài)變量時有沒有給設(shè)置初始化值,如果有就把靜態(tài)變量設(shè)置為用戶自己設(shè)置的初始化值,如果沒有還是讓靜態(tài)變量為初始化值
          類的加載、連接和初始化
          類的加載
          類的加載指的是將類的.class文件中的二進(jìn)制數(shù)據(jù)讀入到內(nèi)存中,將其放在運(yùn)行時數(shù)據(jù)區(qū)的方法區(qū)內(nèi),然后在堆區(qū)創(chuàng)建一個java.lang.Class對象,用來封裝類在方法區(qū)內(nèi)的數(shù)據(jù)結(jié)構(gòu) 。這里的class對象其實就像一面鏡子一樣,外面是類的源程序,里面是class對象,它實時的反應(yīng)了類的數(shù)據(jù)結(jié)構(gòu)和信息。
          加載.class文件的方式
          1、從本地系統(tǒng)中直接加載
          2、通過網(wǎng)絡(luò)下載.class文件
          3、從zip,jar等歸檔文件中加載.class文件
          4、從專有數(shù)據(jù)庫中提取.class文件
          5、將Java源文件動態(tài)編譯為.class文件
          類的加載過程
          結(jié)論:
          1、類的加載的最終產(chǎn)品是位于堆區(qū)中的Class對象
          2、Class對象封裝了類在方法區(qū)內(nèi)的數(shù)據(jù)結(jié)構(gòu),并且向Java程序員提供了訪問方法區(qū)內(nèi)的數(shù)據(jù)結(jié)構(gòu)的接口
          Java虛擬機(jī)給我們提供了兩種類加載器:
          1、Java虛擬機(jī)自帶的加載器
          1)根類加載器(使用C++編寫,程序員無法在Java代碼中獲得該類)
          2)擴(kuò)展加載器,使用Java代碼實現(xiàn)
          3)系統(tǒng)加載器(應(yīng)用加載器),使用Java代碼實現(xiàn)
          2、用戶自定義的類加載器
          java.lang.ClassLoader的子類
          用戶可以定制類的加載方式

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

        免費(fè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>
            陇西县| 上犹县| 原阳县| 镇宁| 神池县| 万盛区| 庆阳市| 桐梓县| 平凉市| 新郑市| 通城县| 渭南市| 平度市| 墨脱县| 商河县| 巴林左旗| 泗水县| 博白县| 清水河县| 榆树市| 南江县| 浮梁县| 奇台县| 宜川县| 临邑县| 博客| 娱乐| 资阳市| 焦作市| 盐源县| 长丰县| 富民县| 海林市| 青浦区| 福建省| 静宁县| 虹口区| 穆棱市| 晋宁县| 镇原县| 绥滨县|