<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Feng.Li's Java See

    抓緊時(shí)間,大步向前。
    隨筆 - 95, 文章 - 4, 評(píng)論 - 58, 引用 - 0
    數(shù)據(jù)加載中……

    JVM使用方法區(qū)信息例子

    本文是對(duì)JVM執(zhí)行一個(gè)Class文件的過程的一個(gè)總結(jié)。比如,現(xiàn)在我有2個(gè)類:
    1:Class Lava {
    ?? private int speed = 5;
    ?? void flow() {}
    }
    2:??? Class Volcano {
    ?? public static void main(String [] args) {
    ??? Lava lava =? new Lava ();
    ??? lava.flow()
    }
    }
    下面就是JVM的某個(gè)實(shí)現(xiàn)執(zhí)行Class文件的一個(gè)過程:

    1:JVM找到并讀入相應(yīng)的Class文件 :Volcano.class,然后把導(dǎo)入的二進(jìn)制數(shù)據(jù)中提取的類型信息保存到方法區(qū)(方法區(qū):保存類型信息的運(yùn)行時(shí)數(shù)據(jù)區(qū),也就是JVM內(nèi)存管理體系結(jié)構(gòu)的一個(gè)組成)

    2:執(zhí)行保存在方法區(qū)的字節(jié)碼 (執(zhí)行main()方法的字節(jié)碼,)在執(zhí)行時(shí),持有指向Volcano類常量池的一個(gè)指針 (常量池:就是一個(gè)符號(hào)引用 如:Lava lava = new Lava()這句中的Lava就是一個(gè)符號(hào)引用)

    3:JVM只在需要時(shí)才裝載類(動(dòng)態(tài)連接) 。JVM使用常量池指針找到第一項(xiàng),發(fā)現(xiàn)是"Lava"字符串,檢查方法區(qū),發(fā)現(xiàn)Lava類并未被裝載。


    4:開始裝載Volcano.class,同樣,把讀入的二進(jìn)制數(shù)據(jù)中的類型信息放到方法區(qū)。

    5:JVM用一個(gè)直接指向方法區(qū)Lava類數(shù)據(jù)的指針來替換常量池的第一項(xiàng),也就是原先的“Lava”字符串。 這個(gè)過程就是所謂的:“常量池解析”---符號(hào)引用替換為直接引用。

    6:JVM準(zhǔn)備為新的Lava對(duì)象分配內(nèi)存。分配對(duì)象當(dāng)然需要類型信息,此時(shí),用剛才替換的那個(gè)指針,也就是替換“Lava”字符串的那個(gè)指針(此時(shí),這個(gè)指針指向方法區(qū)Lava類的數(shù)據(jù))來訪問Lava的類型信息(這個(gè)信息剛放到方法區(qū))。找出其中記錄的這樣一個(gè)信息:需要分配多少內(nèi)存。

    7:確定內(nèi)存要多大以后,在堆上分配內(nèi)存,并初始化變量,包括超類的變量()。

    8:把新生成的Lava對(duì)象引用壓到Java棧中。到此,完成Lava lava = new Lava(); speed初始化為0。

    9:通過此時(shí)生成的Lava引用,把speed 初始化為正確的值 :5

    10: 通過這個(gè)引用調(diào)用Flow()。

    以上為我以一個(gè)例子來說明JVM 的一個(gè)實(shí)現(xiàn)執(zhí)行Class的流程,歡迎大家閱讀和提出意見.

    posted on 2006-12-14 12:05 小鋒 閱讀(2153) 評(píng)論(4)  編輯  收藏 所屬分類: J2SE

    評(píng)論

    # re: JVM使用方法區(qū)信息例子  回復(fù)  更多評(píng)論   

    《深入Java虛擬機(jī)》這本書真不錯(cuò),講的很清楚啊。。。
    2007-08-23 22:44 | carrincha

    # re: JVM使用方法區(qū)信息例子  回復(fù)  更多評(píng)論   

    個(gè)人感覺第8和9需要修改一下
    改為“通過Lava的默認(rèn)構(gòu)造函數(shù)將Lava對(duì)象壓入棧中,并完成初試化”
    應(yīng)該說明下lava被壓入的原因 這樣才清晰 你說呢?
    2008-10-23 11:11 | wangc

    # re: JVM使用方法區(qū)信息例子  回復(fù)  更多評(píng)論   

    關(guān)于speed的兩次初始化 你有何依據(jù) 能不能說來聽聽:)
    2008-10-23 11:14 | wangc

    # re: JVM使用方法區(qū)信息例子  回復(fù)  更多評(píng)論   

    帖子不能修改 這個(gè)很頭疼
    2008-10-24 09:22 | wangc
    主站蜘蛛池模板: 日韩在线观看免费| 国产成人久久精品亚洲小说| 精品久久久久久无码免费| 日韩成全视频观看免费观看高清| 亚洲成人免费电影| 黄色免费网站网址| 2017亚洲男人天堂一| 免费无码A片一区二三区| 亚洲 暴爽 AV人人爽日日碰| 免费无码不卡视频在线观看| 亚洲欧美日韩综合久久久| 宅男666在线永久免费观看| 亚洲AV无码成人精品区狼人影院| 日本不卡在线观看免费v| 国产成人 亚洲欧洲| 亚洲第一网站男人都懂| 国产成人无码精品久久久久免费| 久久亚洲国产精品123区| 国产午夜不卡AV免费| 久久精品国产亚洲AV无码娇色| free哆啪啪免费永久| 亚洲性色AV日韩在线观看| 国产成人aaa在线视频免费观看| 四虎影视久久久免费| 国产亚洲av片在线观看16女人| 久久中文字幕免费视频| 亚洲人成人77777在线播放| 成人免费777777| 免费在线人人电影网| 亚洲成色在线影院| 毛片免费全部免费观看| 国产亚洲精品美女久久久久 | 今天免费中文字幕视频| 老司机亚洲精品影院无码| 成年女人色毛片免费看| 青青草国产免费国产是公开| 亚洲AV色香蕉一区二区| 在线免费观看色片| 中国国产高清免费av片| 久久亚洲最大成人网4438| 亚洲国产精品激情在线观看|