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

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

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

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

    JVM在裝載class文件的時候,會有一步是將符號引用解析為直接引用的過程。

    那么這里的直接引用到底是什么呢?

    對于指向“類型”【Class對象】、類變量、類方法的直接引用可能是指向方法區(qū)的本地指針

    指向?qū)嵗兞俊嵗椒ǖ闹苯右枚际瞧屏?/span>。實例變量的直接引用可能是從對象的映像開始算起到這個實例變量位置的偏移量實例方法的直接引用可能是方法表的偏移量

    在《深入java虛擬機》書的第197頁我們可以看到,子類中方法表的偏移量和父類中的方法表的偏移量是一致的。比如說父類中有一個say()方法的偏移量是7,那么子類中say方法的偏移量也是7。

    書中第199頁說,通過“接口引用”來調(diào)用一個方法,jvm必須搜索對象的類的方法表才能找到一個合適的方法。這是因為實現(xiàn)同一個接口的這些類中,不一定所有的接口中的方法在類方法區(qū)中的偏移量都是一樣的。他們有可能會不一樣。這樣的話可能就要搜索方法表才能確認要調(diào)用的方法在哪里。

    而通過“類引用”來調(diào)用一個方法的時候,直接通過偏移量就可以找到要調(diào)用的方法的位置了。【因為子類中的方法的偏移量跟父類中的偏移量是一致的】

    所以,通過接口引用調(diào)用方法會比類引用慢一些。

    下面介紹下什么是接口引用。

    interface A{void say();}

    class B implements A{}

    class C{public static void main(String []s){A a=new B();a.say()}}

    在上面的第三行代碼中,就是用“接口引用”來調(diào)用方法。

    --------------------------------------------------------------------

    符號引用:

    符號引用是一個字符串,它給出了被引用的內(nèi)容的名字并且可能會包含一些其他關(guān)于這個被引用項的信息——這些信息必須足以唯一的識別一個類、字段、方法。這樣,對于其他類的符號引用必須給出類的全名。對于其他類的字段,必須給出類名、字段名以及字段描述符。對于其他類的方法的引用必須給出類名、方法名以及方法的描述符。



    總結(jié):JVM對于直接引用和符號引用的處理是有區(qū)別的,可以看到符號引用時,JVM將使用StringBuilder來完成字符串的  添加,而直接引用時則直接使用String來完成;直接引用永遠比符號引用效率更快,但實際應(yīng)用開發(fā)中不可能全用直接引用,要提高效能可以考慮按虛擬機的思維來編寫你的程序。

    1.0 直接引用:

    public class StringAndStringBuilder{
       public static void main(String[] args){    
           System.out.println ("s=" + "asdfa");
       }
    }

    反編譯后的:

    F:\java\res\字節(jié)碼>javap -c StringAndStringBuilder
    Compiled from "StringAndStringBuilder.java"
    public class StringAndStringBuilder extends java.lang.Object{
    public StringAndStringBuilder();
      Code:
       0:   aload_0
       1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
       4:   return

    public static void main(java.lang.String[]);
      Code:
       0:   ldc     #2; //String asdfa
       2:   astore_1
       3:   getstatic       #3; //Field java/lang/System.out:Ljava/io/PrintStream;
       6:   ldc     #4; //String s=asdfa
       8:   invokevirtual   #5; //Method java/io/PrintStream.println:(Ljava/lang/Str
    ing;)V
       11:  return

    }

     

    2.0 符號引用:

    public class StringAndStringBuilder{
       public static void main(String[] args){    
          String s="asdfa";
            System.out.println ("s=" + s);
       }
    }

    反編譯后的:

    F:\java\res\字節(jié)碼>javap -c StringAndStringBuilder
    Compiled from "StringAndStringBuilder.java"
    public class StringAndStringBuilder extends java.lang.Object{
    public StringAndStringBuilder();
      Code:
       0:   aload_0
       1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
       4:   return

    public static void main(java.lang.String[]);
      Code:
       0:   ldc     #2; //String asdfa
       2:   astore_1
       3:   getstatic       #3; //Field java/lang/System.out:Ljava/io/PrintStream;
       6:   new     #4; //class java/lang/StringBuilder
       9:   dup
       10:  invokespecial   #5; //Method java/lang/StringBuilder."<init>":()V
       13:  ldc     #6; //String s=
       15:  invokevirtual   #7; //Method java/lang/StringBuilder.append:(Ljava/lang/
    String;)Ljava/lang/StringBuilder;
       18:  aload_1
       19:  invokevirtual   #7; //Method java/lang/StringBuilder.append:(Ljava/lang/
    String;)Ljava/lang/StringBuilder;
       22:  invokevirtual   #8; //Method java/lang/StringBuilder.toString:()Ljava/la
    ng/String;
       25:  invokevirtual   #9; //Method java/io/PrintStream.println:(Ljava/lang/Str
    ing;)V
       28:  return

    }


    posted on 2014-12-16 20:14 abin 閱讀(1888) 評論(0)  編輯  收藏 所屬分類: JVM
    主站蜘蛛池模板: 亚洲av最新在线网址| 性生大片视频免费观看一级| 久久影院亚洲一区| 猫咪社区免费资源在线观看| a毛片视频免费观看影院| 亚洲精品国产av成拍色拍| 亚洲视频在线观看视频| 亚洲日韩精品一区二区三区 | 亚洲精品无码AV中文字幕电影网站| 亚洲精品在线免费看| 色播在线永久免费视频网站| 国产亚洲视频在线| 亚洲人成色4444在线观看| 亚洲精品国产福利在线观看| 久久青青成人亚洲精品| 伊人久久大香线蕉亚洲| 免费很黄很色裸乳在线观看| 日韩成全视频观看免费观看高清| 麻豆国产精品免费视频| 国产又黄又爽又猛免费app| 亚洲av乱码中文一区二区三区| 亚洲a级片在线观看| 亚洲日韩乱码中文无码蜜桃臀| 久久亚洲AV无码精品色午夜麻| 亚洲熟妇无码乱子AV电影| 亚洲精品日韩中文字幕久久久| 皇色在线视频免费网站| 亚洲最大的成人网站| 国产精品久久亚洲不卡动漫| 亚洲国产日韩在线成人蜜芽| 久久精品蜜芽亚洲国产AV| 亚洲一区二区无码偷拍| 亚洲色偷偷色噜噜狠狠99网| 亚洲综合校园春色| 亚洲人成色777777老人头| 99亚洲乱人伦aⅴ精品| 精品特级一级毛片免费观看| 偷自拍亚洲视频在线观看| 视频免费1区二区三区| 国产高清视频免费在线观看 | 国产嫩草影院精品免费网址|