我们注意到,当我们在Java 6上编译类时,它们一直比Java 5大。
据我所知,到目前为止还没有对字节代码进行任何更改,所以我假设Java 6编译器正在投入更多内容。这是所有必需的,还是有任何方法可以关闭它并仍然编译Java 6源代码?
答案 0 :(得分:14)
版本6 javac在类文件中生成了额外的“堆栈映射”属性,以便jvm更容易,更快地进行验证。我怀疑这个数量差异太大,你总是可以使用-target 1.5
选项使它生成与早期版本相同的字节码。
修改:有关此新属性的详细信息,请参见jsr 202
的第4.8.4节4.8.4 StackMapTable属性
堆栈映射属性是代码的属性表中的可变长度属性 属性。属性的名称是StackMapTable。在此期间使用此属性 通过类型检查进行验证的过程(§4.11.1)。
堆栈映射属性由零个或多个堆栈映射帧组成。每个堆栈图 frame指定(显式或隐式)字节码偏移,验证 类型(第4.11.1节)用于局部变量,以及操作数的验证类型 叠加。
答案 1 :(得分:2)
使用javap
命令转储文件的内容,以查看是否有明显的突出显示。 Java 6类文件中可能还有一些额外的属性。