我有一个关于JIT的问题(这是应该解决的问题吗?)
例如,我有一个简单的数学任务要做,我不知道哪一个更好的方式来编程:
public class Spielwiese {
static final BigDecimal STATIC_VALUE = new BigDecimal( "5" );
public static BigDecimal doSomeCalculation1(BigDecimal bd) {
return new BigDecimal("5").multiply( bd );
}
public static BigDecimal doSomeCalculation2(BigDecimal bd) {
return STATIC_VALUE.multiply( bd );
}
}运行中的java程序会看到新的doSomeCalculation1(...) (“5”)指令实际上可以被静态用法所替代吗?-这可能会使BigDecimal更易读。
如果没有,还会有什么其他原因重复一次又一次地实例化相同/等价物?
你个人是怎么做到的?
我的问题还能从哪里得到答案呢?
发布于 2018-08-23 11:33:48
这不是真正的JIT问题。代码的两个版本之间的区别实际上是关于缓存的。
STATIC_VALUE在Spielwiese类的生命周期内是可访问的:可能是应用程序。BigDecimal对象。无论JIT编译如何,情况都是如此。
我会怎么做?
首先,除非我的直觉告诉我性能可能很重要,否则我可能会对可读性进行优化。从程序员生产力的角度来看,这种微观优化很少是值得的。
如果我需要对经常调用该方法的情况进行优化,STATIC_VALUE方法可能会更快一些。对static变量的引用是单个字节码,很可能会转换为单个机器指令。(也许是两个)。构造一个新的BigDecimal值将需要更多的数量级指令。
如果我需要为内存的使用进行优化,那么更好的方法是值得商榷的。然而,这两种方法之间的差别很可能很小,很难实际衡量。
我的问题还能从哪里得到答案呢?
你可以自己回答:
https://stackoverflow.com/questions/51962362
复制相似问题