gpt4 book ai didi

optimization - 在 javac 中禁用优化?

转载 作者:行者123 更新时间:2023-12-03 16:01:19 24 4
gpt4 key购买 nike

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

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

最佳答案

我认为您似乎想到的大多数优化实际上都是 JLS 强制要求的,因为这些是 constant expressions .因此,请确保您没有常量表达式,并且 javac 无法优化它们。

在你的例子中,你可以这样写:

byte min = new Byte((byte)-128).byteValue();
byte max = new Byte((byte) 127).byteValue();

assertTrue((byte)(max + 1) == min); // Should overflow and work correctly.

关于optimization - 在 javac 中禁用优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4882088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com