目录


​通过javap命令查看class文件的字节码内容​

​常量池​

​描述符​

​字段描述符​

​方法描述符​

​解读方法字节码​

​图解​

​研究i++与++i的不同​

​查看字节码​

​对比​

​分析字符串拼接孰优孰劣​

​小结​



JVM 调优实战--JVM字节码_字节码

通过javap命令查看class文件的字节码内容

JVM 调优实战--JVM字节码_描述符_02


通过javap命令查看字节码并将内容写入到Test1.txt文件中的命令:

javap -v Test1.class > Test.txt

JVM 调优实战--JVM字节码_字节码_03


JVM 调优实战--JVM字节码_java_04


打开Test1.txt文件:

JVM 调优实战--JVM字节码_java_05


JVM 调优实战--JVM字节码_字节码_06

常量池

JVM 调优实战--JVM字节码_字节码_07

描述符

字段描述符

JVM 调优实战--JVM字节码_java_08

方法描述符

JVM 调优实战--JVM字节码_描述符_09

解读方法字节码

JVM 调优实战--JVM字节码_java_10

图解

JVM 调优实战--JVM字节码_描述符_11

研究i++与++i的不同

JVM 调优实战--JVM字节码_字节码_12

查看字节码

JVM 调优实战--JVM字节码_java_13

对比

JVM 调优实战--JVM字节码_java_14

JVM 调优实战--JVM字节码_描述符_15

JVM 调优实战--JVM字节码_描述符_16

JVM 调优实战--JVM字节码_描述符_17

JVM 调优实战--JVM字节码_java_18

分析字符串拼接孰优孰劣

JVM 调优实战--JVM字节码_java_19


编写测试案例:


JVM 调优实战--JVM字节码_java_20


m1方法的执行过程中,jvm底层会new StringBuilder()进行处理;

JVM 调优实战--JVM字节码_描述符_21



结论:m1方法中虽然在代码中使用的是+号拼接,但是在字节码中也被编译成了StringBuilder的方式。因此可以得出结论:

字符串拼接,+号和StringBuilder是相等的,效率一样。


再来看一个案例:

JVM 调优实战--JVM字节码_描述符_22


m1方法,底层JVM的执行过程是循环多少次就new多少个StringBuilder对象:

goto语句,比如goto 5,跳转到第5行继续执行。

JVM 调优实战--JVM字节码_字节码_23

m2方法,JVM的层只new了一个StringBuilder对象:

JVM 调优实战--JVM字节码_字节码_24

结论:m1的效率明显低于m2方法。


小结


使用字节码的方式可以很好地查看代码底层的执行,从而可以看出哪些实现效率高,哪些实现效率低。可以更好地对我们的代码进行优化,让程序执行效率更高。