私は以下の問題があります:コンパイルが異なるディレクトリでコンパイルされた場合、生成された.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
は、同じ実行ロジックがあります。残念ながら、コンパイラがこのように動作する理由を説明する必要があります。奇妙なことは、同じディレクトリ、同じソースでコンパイルするときでさえ、連続したコンパイルの違いが発生します(常に上記と同じです)。
何が起こりますか? お返事ありがとうございます!
コマンドラインからコンパイルしていますか?あなたのjavacコールは何ですか? – Atreys
命令番号が1000を超えると、メソッドが明らかに長すぎます。 –
JDKのどのバージョン(またはそれ以上のバージョン)を使用していますか?あなたの2番目のバージョンは、最初のバージョンより古いjavacで作成されたようです。 –