如何在dos命令中查看class的jvm文件


前几天我看到这样的一个问题,当时不是很清楚它的意思,所以运行一下看一下结果,

结果知道了以后想要看一下它是如何运行的,所以想要看一下编译的class文件,所以就有另外一下的操作

如何在dos命令中查看class的jvm文件


刚开始的时候直接查看了编译好的class文件,但是格式是真的看不懂,改了几种编码格式都难以阅读,然后我听 说可以在dos中查看他的运行过程,这边就试验了一下;

这里是输出的运行的详细内容javap -verbose className

如何在dos命令中查看class的jvm文件

然后需要仅仅是简单的过程的话可以使用javap - c className

如何在dos命令中查看class的jvm文件


然后我们可以从这个编译的过程中可以看出String的拼接是用了StringBuider的,因为String是final类型的所以new了一个StringBuider.这边输出比较的结果是地址,所以说这两个不相等

然后看加了final的String,可以看出编译的时候并没有new一个StringBuilder,只是在字符串常量池里面的字符串拼接

还有一些常用命令给你们用参考

命令选项
  -help 输出 javap 的帮助信息。
  -l 输出行及局部变量表。
  -b 确保与 JDK 1.1 javap 的向后兼容性。
  -public 只显示 public 类及成员。
  -protected 只显示 protected 和 public 类及成员。
  -package 只显示包、protected 和 public 类及成员。这是缺省设置。
  -private 显示所有类和成员。
  -J[flag] 直接将 flag 传给运行时系统。
  -s 输出内部类型签名。
  -c 输出类中各方法的未解析的代码,即构成 Java 字节码的指令。
  -verbose 输出堆栈大小、各方法的 locals 及 args 数,以及class文件的编译版本
  -classpath[路径] 指定 javap 用来查找类的路径。如果设置了该选项,则它将覆盖缺省值或 CLASSPATH 环境变量。目录用冒号分隔。
   -bootclasspath[路径] 指定加载自举类所用的路径。缺省情况下,自举类是实现核心 Java 平台的类,位于 jrelib下面。

  -extdirs[dirs] 覆盖搜索安装方式扩展的位置。扩展的缺省位置是 jrelibext。


希望可以提出问题和建议,我们一起进步;