2009-04-24 11 views
0

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.

Antwort

4

Nr. BigDecimal ist eine Bibliotheksklasse (es ist nicht einmal in java.lang), so dass der Compiler es wie jede andere Klasse behandelt.

BigDecimalkönnte Sonderfall dies intern, aber anscheinend nicht.

(Edit:. Ich sollte hinzufügen, dass es möglich ist, dass der JIT-Compiler etwas Magie funktionieren könnte, aber ich würde ein paar Tests zu tun haben, um sicher zu sein)

ich nur würde vorschlagen, dass Sie Ihren Code ändern zu verwenden BigDecimal.valueOf(), weil 1, 2 und 3 einige der Spezialfälle sind, die intern von BigDecimal zwischengespeichert werden.

+0

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

+0

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. –

0

Wenn Ihre Funktion nicht deterministisch ist, kann sie trotzdem nicht zur Kompilierzeit optimiert werden.

Verwandte Themen