0
我遇到以下問題:編譯某些類時,如果在不同的目錄中執行編譯,則會生成不同的.class文件。生成的.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
如果您的指令編號超過了千分之一,則您的方法顯然太長。 –
您使用的是哪個版本(或更好的版本)的JDK?看起來你的第二個版本是用比第一個更早的javac創建的。 –