如果源在不同的目录中编译,则编译器输出(.class文件)会有所不同

时间:2011-07-01 12:27:47

标签: java javac bytecode

我有以下问题:在编译某些类时,如果在不同目录中执行编译,则会生成不同的.class文件。生成的.class文件之间的差异如下:

1)版本:

1062: aload_3
1063: invokevirtual <some_method>
1066: goto 1078
1069: astore 15
1071: aload_3
1072: invokevirtual <some_method>
1075: aload 15
1077: athrow
1078: aload_3
1079: areturn

2)版本:

1062: jsr 1076
1065: goto 1084
1068: astore 15
1070: jsr 1076
1073: aload 15
1075: athrow
1076: astore 16
1078: aload_3
1079: invokevirtual <some_method>
1082: ret 16
1084: aload_3
1085: areturn

上面的代码具有相同的执行逻辑。不幸的是,我必须解释为什么编译器会以这种方式运行。奇怪的是,有时即使在同一目录中编译相同的源,也会发生连续编译之间的差异(总是相同的,如上所述)。

知道会发生什么吗? 提前感谢您的回复!

1 个答案:

答案 0 :(得分:0)

该类是否使用具有包级别范围的任何方法或类?这可以解释任何差异。