我是靠谱客的博主 缓慢小刺猬,最近开发中收集的这篇文章主要介绍javap看编译器优化,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

有这么一道题
下面这行代码中,创建了几个String对象

        String str = "hello" + "world" + 360;

按照我们原有的理解,“hello”是一个对象,“world”是一个对象,360也将转成一个对象。最后又创建一个新对象,将这三个字符串拼接。这样就是4个对象了。

但事实上只创建了一个对象,这件事情就涉及了“编译器优化这一件事”

编译器优化做的最核心的事:调整当前执行代码(可能是调整执行顺序,也可能事调整语句内容)
希望最终的程序执行效果等价,并且执行效率有所提高。

不同版本的jdk优化效果不同。

我们就可以借助javap这个操作
javap对.class 文件进行反编译

  1. 右键package,在终端中打开
  2. dir命令可以看到当前的.java文件
  3. javac Test11_5.java -encoding utf8
  4. dir,发现一个test.class文件
  5. javap Test11_5.class,然后就会看到一个Java的代码
  6. javap -help
  7. 找到 -c 对代码进行反汇编
  8. javap -c Test11_5.class
    找到main 方法里面的汇编指令
 public static void main(java.lang.String[]);
    Code:
       0: ldc           #2                  // String helloworld360
       2: astore_1
       3: getstatic     #3                  // Field java/lang/System.out:Ljava/io/PrintStream;
       6: invokevirtual #4                  // Method java/io/PrintStream.println:()V
       9: return

我们发现 0: ,只创建了一个字符串常量,
我们将代码改一下,在执行上面的同样操作

		String str2 = 360 + "";
        String str = "hello" + "world" + str2;
public static void main(java.lang.String[]);
    Code:
       0: ldc           #2                  // String 360
       2: astore_1
       3: new           #3                  // class java/lang/StringBuilder
       6: dup
       7: invokespecial #4                  // Method java/lang/StringBuilder."<init>":()V
      10: ldc           #5                  // String helloworld
      12: invokevirtual #6                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      15: aload_1
      16: invokevirtual #6                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      19: invokevirtual #7                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      22: astore_2
      23: return
}

我们分析一下
0:创建了一个字符串对象
3:new了一个Stringbuilder对象
10:创建了一个helloword对象
12:和16:分别都有一次append

最后

以上就是缓慢小刺猬为你收集整理的javap看编译器优化的全部内容,希望文章能够帮你解决javap看编译器优化所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部