Ich war neugierig, was die Performance-Unterschiede zwischen Java-Klasse und Urtyp für Doppel waren. Also habe ich einen kleinen Benchmark erstellt und festgestellt, dass der Klassentyp 3x-7x langsamer ist als der primitive Typ. (3x auf dem lokalen Rechner OSX, 7x auf ideone)Java Doppel vs double: Klasse Typ vs Urtyp
Hier ist der Test:
class Main {
public static void main(String args[]) {
long bigDTime, littleDTime;
{
long start = System.nanoTime();
Double d = 0.0;
for (Double i = 0.0; i < 1432143.341; i += 0.1) {
d += i;
}
long end = System.nanoTime();
bigDTime = end - start;
System.out.println(bigDTime);
}
{
long start = System.nanoTime();
double d = 0.0;
for (double i = 0.0; i < 1432143.341; i += 0.1) {
d += i;
}
long end = System.nanoTime();
littleDTime = end - start;
System.out.println(littleDTime);
}
System.out.println("D/d = " + (bigDTime/littleDTime));
}
}
Warum ist der Double-Typ so viel langsamer? Warum wird es überhaupt implementiert, um mathematische Operatoren zu ermöglichen?
Es ist langsam wegen der Notwendigkeit zu boxen und zu entpacken. Dies ist das erwartete Verhalten. –
@HovercraftFullOfEels Das macht Sinn, aber es scheint immer noch eine Menge Overhead. –
Es ist eine Menge Overhead. Aus diesem Grund sollten Sie die Verwendung primitiver Wrapper-Typen in zeitkritischem Code vermeiden. –