我正在編寫自己的JVM副本,並希望測試其在一些簡單的數字操作上的行爲,例如添加,減法,數字溢出等。而不是手寫字節碼,我認爲這將是一個只需編寫簡單的Java代碼,將javac
編譯成字節碼,然後在該字節碼上測試JVM即可。在javac中禁用優化?
問題是javac
正在進行大量(非常合理的!)內聯優化,以防止代碼測試我想測試的內容。例如,一個測試試圖驗證對所有類型都正確處理積分溢出。這裏是一個快照:
byte min = (byte)-128;
byte max = (byte) 127;
assertTrue((byte)(max + 1) == min); // Should overflow and work correctly.
生成.class
文件有((byte)max + 1)
硬編碼爲(byte) -128
,這完全違背了測試點的結果。
我的問題是這樣的:有沒有辦法在javac
禁用優化?我一直無法找到一個命令行開關來做到這一點,雖然也許我只是沒有看夠不夠。如果沒有辦法做到這一點,是否有另一個Java編譯器能夠在關閉所有優化的情況下進行編譯?
我還沒有聽說過茉莉的!這是一個非常酷的鏈接。我可能需要調查這一點。 – templatetypedef 2011-02-03 02:43:32