2011-07-01 4 views
0

私は以下の問題があります:コンパイルが異なるディレクトリでコンパイルされた場合、生成された.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 

は、同じ実行ロジックがあります。残念ながら、コンパイラがこのように動作する理由を説明する必要があります。奇妙なことは、同じディレクトリ、同じソースでコンパイルするときでさえ、連続したコンパイルの違いが発生します(常に上記と同じです)。

何が起こりますか? お返事ありがとうございます!

+0

コマンドラインからコンパイルしていますか?あなたのjavacコールは何ですか? – Atreys

+0

命令番号が1000を超えると、メソッドが明らかに長すぎます。 –

+0

JDKのどのバージョン(またはそれ以上のバージョン)を使用していますか?あなたの2番目のバージョンは、最初のバージョンより古いjavacで作成されたようです。 –

答えて

0

クラスはパッケージレベルのスコープを持つメソッドまたはクラスを使用していますか?これは違いを説明することができます。

+0

これは何に影響するのですか? –

関連する問題