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

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

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

    Junky's IT Notebook

    統(tǒng)計(jì)

    留言簿(8)

    積分與排名

    WebSphere Studio

    閱讀排行榜

    評(píng)論排行榜

    《深入JAVA虛擬機(jī)》筆記(一)

    ? 看了第6章的java class文件這一部分,我覺得對(duì)class文件有進(jìn)一步的了解。于是想作一點(diǎn)筆記,以備以后查時(shí)方便。
    ????? 這章的一個(gè)例子雖然簡(jiǎn)單,但是我覺的很有一定代表性。例子如下:

    1:class Act {
    2:?? public static void doMathForever(int m) {
    3:????? int i = 0;
    4:???? int n=4>3?1:0;
    5:??????? for (;;) {
    6:?????????? i += 1;
    7:??????????? i *= 2;
    8:?????? }
    9:??? }
    10:}


    我用javap -verbose Act查看,代碼如下:(紅色為自己加上的注解)
    Compiled from "Act.java"?????
    因?yàn)榫幾g原文件不一定必須與java語言相關(guān),可以使用其他語言來編寫程序,然后將其編譯為class文件,所以這里要寫上Act.java而不是Act. 呵呵,想來以前為什么javac 來編譯源文件時(shí)一定要加.java,而java 執(zhí)行時(shí)就不需要加.java了,當(dāng)時(shí)就是搞不懂,現(xiàn)在明白了。
    class Act extends java.lang.Object
    ? SourceFile: "Act.java"
    SourceFile屬性,它提供了產(chǎn)生class文件的源文件的名稱,它是一個(gè)可選的項(xiàng),為什么說它是可選項(xiàng)的,因?yàn)閏lass可以自己用UE等工具寫。
    ? minor version: 0
    ? major version: 49
    版本號(hào):我用的是5.0的,出來的major version 是49,書上說1.0或1.2是45,1.4我想可能是48?吧。呵呵,還沒有試過。
    ? Constant pool:
    這個(gè)是常量池,剛看書的時(shí)候我還以為常量池放的一定是常量。錯(cuò)。
    常量池就是該類型所用常量的一個(gè)有序集合,包括直接常量(String,integer,floating??point常量)和對(duì)其他類型、字段和方法的符號(hào)引用。
    const #1 = Method?#3.#12;?//? java/lang/Object."<init>":()V
    因?yàn)镃onstant pool#0是不用的,所以只能從#1開始,但不知為什么第一個(gè)是Method而不是class,我現(xiàn)在還不明白。
    const #2 = class?#13;?//? Act
    CONSTANT_Class是對(duì)一個(gè)類或接口的符號(hào)引用。這個(gè)是指向#13
    const #3 = class?#14;?//? java/lang/Object
    const #4 = Asciz?<init>;
    ?這個(gè)Asciz應(yīng)該表示是CONSTANT_Utf8吧,因?yàn)镃?ONSTANT_Utf8可以是存儲(chǔ)四種基本信息類型:文字字符串、被定義的類和接口描述、對(duì)其他類或接口的符號(hào)引用以及屬性相關(guān)的字符串。
    <init>是實(shí)例的初始化方法,是實(shí)例調(diào)用方法前必須要<init>的,
    <clinit>是類的初始化方法。
    const #5 = Asciz?()V;
    此<init>的描述符,()V表示<init>沒有帶參數(shù),返回的是void型的。
    書上介紹:
    ()I? int getSize()??
    () Ljava/lang/String????? String toString()

    const #6 = Asciz?Code;
    Code在所有不是抽象或者本地方法的method_info信息中,都存在一個(gè)Code_attribute表。
    但是我試一下在抽象的方法中同樣也有code的啊,不懂中。
    const #7 = Asciz?LineNumberTable;
    LineNumberTable屬性建立了方法字節(jié)碼流偏移量和源代碼行號(hào)之間的映射關(guān)系。關(guān)于這一點(diǎn),我在下面詳細(xì)談到。
    const #8 = Asciz?doMathForever;
    const #9 = Asciz?(I)V;
    const #10 = Asciz?SourceFile;
    const #11 = Asciz?Act.java;
    const #12 = NameAndType?#4:#5;//? "<init>":()V
    NameAndType指向字段或者方法的符號(hào)引用的一部分。為什么沒有指向#8,#9呢?不懂中。
    const #13 = Asciz?Act;
    const #14 = Asciz?java/lang/Object;

    {
    Act();
    ? Code:
    ?? Stack=1, Locals=1, Args_size=1
    需要的棧為1個(gè),只是this的存取;本地變量為1個(gè),也是this,方法的參數(shù)是1個(gè),也是this傳入。
    ?? 0:?aload_0
    從局部變量0中裝載引用類型。
    ?? 1:?invokespecial?#1; //Method java/lang/Object."<init>":()V
    調(diào)用Object的<init>方法,因?yàn)槊總€(gè)類都是繼承Object,所以實(shí)例時(shí)都要調(diào)用Object的<init>方法。
    ?? 4:?return
    ? LineNumberTable:
    ?? line 1: 0

    public static void doMathForever(int);
    ? Code:
    ?? Stack=2, Locals=3, Args_size=1
    ?? 0:?iconst_0?將i 壓入棧
    ?? 1:?istore_1?放i
    ?? 2:?iconst_1 同上
    ?? 3:?istore_2
    ?? 4:?iinc?1, 1? i++
    ? 7? ?iload_1 從局部變量1中裝載int類型值。
    ?? 8:?iconst_2
    ?? 9:?imul
    ?? 10:?istore_1
    ?? 11:?goto?4
    ? LineNumberTable:
    ?? line 3: 0? 源代碼第3行對(duì)應(yīng)Code中的0偏移量。
    ?? line 4: 2
    ?? line 6: 4
    ?? line 7: 7
    ?? line 8: 11

    }

    posted on 2006-06-02 00:10 junky 閱讀(277) 評(píng)論(0)  編輯  收藏 所屬分類: java

    主站蜘蛛池模板: 亚洲国产综合专区电影在线| 精品亚洲视频在线观看| 亚洲av无码偷拍在线观看| 亚洲人成网站在线观看青青| 国产一精品一AV一免费| 亚洲综合国产成人丁香五月激情 | 亚洲国产成人手机在线观看| 亚洲免费在线观看| 亚洲免费中文字幕| 一级毛片不卡免费看老司机| 久久久久亚洲精品日久生情| 无码专区永久免费AV网站| 免费无码一区二区三区| 在线免费观看韩国a视频| 日韩免费在线观看| 成年性生交大片免费看| 国产成人无码免费视频97| 永久久久免费浮力影院| 无码专区一va亚洲v专区在线| 国产伦精品一区二区三区免费下载 | 久久综合九九亚洲一区| 希望影院高清免费观看视频| 一级特级aaaa毛片免费观看 | 免费观看又污又黄在线观看| 亚洲熟妇无码爱v在线观看| 亚洲乱码中文字幕手机在线| 无码中文字幕av免费放| 久久午夜伦鲁片免费无码| 美女视频黄频a免费观看| 亚洲成人福利在线观看| 亚洲人成网7777777国产| 免费一级国产生活片| 成人性生交大片免费看无遮挡| 无码一区二区三区免费| 一级毛片成人免费看a| 亚洲日本成本人观看| 亚洲av成人综合网| 毛片免费在线观看网址| 在线观看的免费网站无遮挡| 久久免费线看线看| 一区二区视频在线免费观看|