Frage

Wir führen derzeit einige Iterationen und andere Operationen mit durch x++; wo x ist ein Integer und nicht ein int.

Operationen können während einiger Benutzeroperationen auf unserem System wiederholt werden, aber nichts zu komplex oder zahlreich wie eine mathematische Anwendung, maximal bis zu 10000 Mal pro Benutzertransaktion..

Wird dieses Auspacken und späteres Boxen unsere Leistung spürbar beeinträchtigen Millisekunde?

War es hilfreich?

Lösung

http://download.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html

"Die Leistung der resultierenden Liste ist wahrscheinlich schlecht, da sie bei jeder Get- oder Set-Operation ein- oder ausboxt.Es ist schnell genug für den gelegentlichen Gebrauch, aber es wäre töricht, es in einer leistungskritischen inneren Schleife zu verwenden.

Wann sollten Sie also Autoboxing und Unboxing verwenden?Verwenden Sie sie nur, wenn zwischen Referenztypen und Grundelementen eine "Impedanzfehlanpassung" besteht, z. B. wenn Sie numerische Werte in eine Sammlung einfügen müssen.Es ist nicht angebracht, Autoboxing und Unboxing für wissenschaftliches Rechnen oder andere leistungsabhängige numerische Codes zu verwenden.Eine Ganzzahl ist kein Ersatz für eine Ganzzahl;autoboxing und Unboxing verwischen die Unterscheidung zwischen primitiven Typen und Referenztypen, aber sie beseitigen sie nicht."

Andere Tipps

Ja, es gibt Auswirkungen auf die Leistung.Der äquivalente Code, der für erstellt wurde ++x beinhaltet jedes Mal das Erstellen eines neuen Integer Objekts. x++ erstellt zusätzlich eine temporäre Variable zum Speichern der vorherigen ganzzahligen Referenz und einiger Manipulationen.Sie können dies überprüfen, indem Sie die Klassendatei zerlegen.

Die Geschwindigkeit des automatischen Boxens hängt von der von Ihnen verwendeten JVM-Version, dem Bereich der tatsächlichen Zahlen, mit denen Sie arbeiten, und Ihren GC-Einstellungen ab.Sehen dieser wirklich interessanter ausführlicher Artikel über (Un-) Boxleistung.

Grundsätzlich speichert die JVM eine Reihe von Integer-Objekten zwischen, sodass nicht jedes Mal die "allgemeinen" Objekte erstellt werden müssen.Sie können diese Cache-Größe konfigurieren.

Was die spezifische Frage betrifft:Wird Ihre Operation sein Millisekunde langsamer, wenn Sie Primitive im Vergleich zu Autoboxing verwenden?Dies hängt ganz von der Größe der Liste ab und davon, wie oft sie aufgerufen wird.Es sollte einfach sein (denke ich!), um die Leistung der primitiven Alternative zu testen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top