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编译器能够在关闭所有优化的情况下进行编译?