java - 无论如何要获取构建 .class 文件时使用的编译标志吗?

标签 java build compilation flags

我有一堆不是我自己构建的 .class 文件。

从这些 .class 文件中,是否可以知道用于构建它们的各种编译标志?诸如...打开或关闭优化、打开或关闭调试信息等。

最佳答案

没有主要的 Java 编译器进行任何类型的优化(除了一些常量值折叠)。这通常保留给 JVM 在运行时完成。

要查明生成的 .class 是否带有调试信息,请使用 -v 标志对其运行 javap 并查看对于 LineNumberTable 属性。它们应该看起来像这样:

  LineNumberTable: 
   line 7: 0
   line 8: 8

如果该类是使用完整的调试信息(包括局部变量)进行编译的,那么它还包含一个 LocalVariableTable,如下所示:

  LocalVariableTable: 
   Start  Length  Slot  Name   Signature
   0      9      0    argc       [Ljava/lang/String;

实际影响输出的一个编译器标志是-encoding,用于指定输入源文件编码。由于 .class 文件中的字符串文字始终使用 UTF-8,因此无法检测 .class 文件中的原始源文件编码。

关于java - 无论如何要获取构建 .class 文件时使用的编译标志吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5087633/

相关文章:

git - 在 Jenkins/Maven 中只构建受影响的模块

build - VariantDir 用于递归 scons C++ 构建

C# 在内存中编译并创建内存组件类型的实例

java - 如何在java中进行excel的单元格迭代

java - 是否为每个方法调用创建一个 EclipseLink EntityManager 或用锁保护?

java - 如何使用 Maven 创建具有依赖项的可执行/可运行 JAR?

android - Ionic 2 RC0 和 Angular 2 最新构建 android 错误 (ngc : Error: Error encountered resolving symbol values statically)

c++ - 将静态局部变量初始化为编译期间未知的值

java - 如何在 Android 的一个 FirestoreRecyclerAdapter 中包含两个模型类轨道和艺术家?

java - 使用不带replaceAll()的循环打印不带元音的UI; java 语