Löscht der Java-Compiler Multiplikationen um 1, wenn Sie über BigDecimal sprechen?BigDecimal: Kann der Java-Compiler Multiplikationen um 1 optimieren?
ich in so etwas wie dieses stehen:
BigDecimal bd = getBigDecimal();//get arbitrary bigDecimal, could be anyone.
bd = bd.multiply(new BigDecimal(getOneTwoOrThree());
Wo die getOneTwoOrThree Methode als deklariert ist:
/*
* Always returns Integers 1, 2 or 3.
*/
Integer getOneTwoOrThree(){
//some code
}
Also, im Grunde.
Wenn getOneTwoOrThree()
1 zurückgibt, führt der Compiler die Multiplikation durch? Oder wird es die Anweisung nicht geben?
Dies ist ein gewisser existenzieller Zweifel, aber ich denke, dass ich auf einem gewissen Niveau früh bin - Optimierung.
Ich denke, es gibt zu viel Code hier zu Inline oder irgendetwas. Ich wäre sehr überrascht, wenn das JIT viel damit anfangen könnte. Bei dieser Implementierung ist das Multiplizieren um eins jedoch von Natur aus billiger als das Multiplizieren mit einer Zahl mit vielen Ziffern (mehr Ziffern, mehr Iterationen einer Schleife). – erickson
Sie sind wahrscheinlich direkt am JIT. Ich bemerkte nur, dass, wenn die BigDecimals klein genug sind, dass ihr Produkt in eine lange passt, der Codeweg wesentlich kürzer ist. Leider löst das Multiplizieren einer großen Zahl mit 1 den Hard Case aus. –