假设我有这样的代码:
log.info("Now the amount" + amount + " seems a bit high")
我会用一个虚拟实现替换 log 方法,例如:
class Logger {
...
public void info() {}
}
如果没有检测到副作用,优化器是否会内联它,并且死代码删除是否会删除参数构造?
最佳答案
我猜编译器(javac)不会,但即时编译器很可能会。
然而,为了让它工作,它必须能够推断出您用来生成参数的任何指令都没有副作用。对于字符串的特殊情况,它应该能够做到这一点,但对于其他方法可能无法做到这一点。
可以肯定的是,做一个小的基准测试,将其与 Jesper 建议和查看的代码进行比较,以更快者或它们是否同样快为准。
另请参阅此处:http://www.ibm.com/developerworks/java/library/j-jtp12214/index.html#3.0
关于java - Java 优化器会删除空方法调用的参数构造吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3092004/