在javac中禁用优化?

tem*_*def 5 optimization javac

我正在编写自己的JVM副本,并希望测试它在一些简单的数字操作上的行为,例如加法,减法,数字溢出等.而不是手工编写字节码,我认为这是个好主意只编写普通的Java代码,将其javac编译为字节码,然后在该字节码上测试JVM.

问题是,javac正在进行大量(非常明智的!)内联优化,以防止代码测试我想要测试的内容.例如,一个测试试图验证是否正确处理了所有类型的积分溢出.这是一个快照:

byte min = (byte)-128;
byte max = (byte) 127;

assertTrue((byte)(max + 1) == min); // Should overflow and work correctly.
Run Code Online (Sandbox Code Playgroud)

生成的.class文件具有((byte)max + 1)硬编码的结果(byte) -128,这完全违背了测试点.

我的问题是:有没有办法禁用优化javac?我无法找到命令行开关来执行此操作,但也许我只是看起来不够努力.如果没有办法做到这一点,是否有另一个Java编译器能够在关闭所有优化的情况下进行编译?

Phi*_*ler 2

许多生产编译器,包括常见的 Sun 派生编译器javac,无论设置为何种优化,都会进行这种简化。

您看过Java 字节码“汇编器” Jasmin吗?