BigDecimalについて話すとき、Javaコンパイラは乗算を1つ取り除きますか?BigDecimal:Javaコンパイラは乗算を1だけ最適化できますか?
私はこれに似た何かに立っている:
getOneTwoOrThree方法は次のように宣言されているBigDecimal bd = getBigDecimal();//get arbitrary bigDecimal, could be anyone.
bd = bd.multiply(new BigDecimal(getOneTwoOrThree());
:基本的には、そう
/*
* Always returns Integers 1, 2 or 3.
*/
Integer getOneTwoOrThree(){
//some code
}
。
getOneTwoOrThree()
が1の場合、コンパイラは乗算を実行しますか?それとも命令がないのでしょうか?
これは多少の存在の疑いですが、私はあるレベルで早期に最適化していると思います。
インラインまたはそれ以上にコードが多すぎると思います。 JITがこれで大いに役立つなら、私は非常に驚くだろう。しかし、この実装では、1を掛けることは、多くの桁数(より多くの桁数、ループの繰り返し回数)で乗算するよりも本質的に安いです。 – erickson
あなたはおそらくJITにいるでしょう。 BigDecimalのサイズが小さくて、その製品が長持ちするのであれば、コードのパスはかなり短くなることに気づいていただけです。残念ながら、巨大な数字に1を掛けると、ハードケースが発生します。 –