Является ли компилятор Java удалением умножений на 1, когда речь идет о BigDecimal?BigDecimal: Может ли компилятор Java оптимизировать умножение на 1?
Я стою в чем-то похожее на это:
BigDecimal bd = getBigDecimal();//get arbitrary bigDecimal, could be anyone.
bd = bd.multiply(new BigDecimal(getOneTwoOrThree());
Если метод getOneTwoOrThree объявлен как:
/*
* Always returns Integers 1, 2 or 3.
*/
Integer getOneTwoOrThree(){
//some code
}
Так, в основном.
если getOneTwoOrThree()
возвращает 1, будет ли компилятор выполнять умножение? Или это прекратит инструктаж?
Это несколько экзистенциальное сомнение, но я думаю, что я на раннем этапе оптимизации.
Я думаю, что здесь слишком много кода для inline или чего-то еще. Я был бы очень удивлен, если бы JIT мог многое с этим справиться. Однако в этой реализации умножение на единицу по сути дешевле, чем умножение на число с большим количеством цифр (больше цифр, больше итераций цикла). – erickson
Вы, вероятно, прямо на JIT. Я просто заметил, что если BigDecimals достаточно малы, чтобы их продукт вписывался в длинный, путь кода значительно короче. К сожалению, умножение огромного числа на 1 приводит к сложному делу. –