java-short,integer,long Leistung
Habe ich gelesen, dass die JVM speichert intern short, integer und long als 4 Byte. Ich lese aus einem Artikel aus dem Jahr 2000, also weiß ich nicht, wie wahr es ist jetzt.
Für die neueren JVMs ist, gibt es einen performance-Gewinn bei der Verwendung kurz über integer/long? Und Tat, dass ein Teil der Umsetzung hat sich verändert, seit 2000?
Dank
InformationsquelleAutor der Frage bob | 2010-03-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden, was Sie brauchen, ich würde denken, shorts, die nur selten verwendet wegen der geringen Reichweite und ist es in big-endian-format.
Alle performance-Gewinn wäre minimal, aber wie ich schon sagte, wenn Ihre Anwendung erfordert eine Reihe mehr, dass dann der eine kurze gehen mit int. Lange kann der Typ auch extrem groß für Sie; aber wieder, es hängt alles von Ihrer Anwendung.
Sollten Sie verwenden Sie nur kurz, wenn Sie ein Anliegen haben, über Raum (Speicher), ansonsten mit int (in den meisten Fällen). Wenn Sie das erstellen von arrays und so versuchen Sie es durch die Deklaration von arrays vom Typ int und short. Kurz wird 1/2 der Raum im Gegensatz zu den int. Aber wenn Sie die tests ausführen, basierend auf der Geschwindigkeit /Leistung, die Sie sehen werden, wenig bis keinen Unterschied (wenn Sie den Umgang mit Arrays)darüber hinaus die einzige Sache, die Sie sparen Platz.
Auch sein, dass ein commentor erwähnt long, weil eine long ist 64 bit. Sie werden nicht in der Lage zu speichern, die Größe von long in 4 bytes (beachten Sie die Reihe von langen).
InformationsquelleAutor der Antwort JonH
Integer-Typen gespeichert sind, in vielen bytes, abhängig von der genauen Art :
Sehen die Skillung hier.
Als für die Leistung, es hängt davon ab, was man mit Ihnen tut.
Zum Beispiel, wenn Sie die Zuweisung eines literalen Wert zu einem byte oder short sind, werden Sie hochskaliert auf int, weil literal-Werte als int-Werte durch default.
Das ist, warum Sie nicht tun können :
Also, wenn Sie planen, zu verwenden, bytes oder shorts zu führen einige Schleifen, Sie werden nicht alles gewinnen.
Auf der anderen Seite, wenn Sie mit arrays von bytes oder shorts zu speichern einige Daten, werden Sie natürlich profitieren Sie von Ihrer Größe reduziert.
So, meine Antwort ist : es hängt 🙂
InformationsquelleAutor der Antwort Olivier Croisier
Es ist eine Implementierung detail, aber es ist immer noch wahr, dass für die Leistung aus Gründen, die meisten JVMs verwenden eine vollständige Wort (oder mehr) für jede variable, da die CPUs auf den Speicher zugreifen, die in Wort-Einheiten. Wenn die JVM gespeichert, die Variablen, die in sub-Wort-Einheiten und Standorten, wäre es tatsächlich langsamer.
Dies bedeutet, dass eine 32-bit-JVM verwenden 4 bytes für kurze (und sogar boolean) während einer 64-bit-JVM verwenden 8 Byte. Aber dasselbe gilt nicht für array-Elemente.
InformationsquelleAutor der Antwort Michael Borgwardt
Ich Stimme mit user2391480, Berechnungen mit shorts zu sein scheinen viel teurer. Hier ist ein Beispiel, wo auf meinem Rechner (Java7 64bit, Intel i7-3770, Windows 7) Betrieb mit shorts sind um ~50 mal langsamer als Integer und Long.
}
Ausgabe:
Hinweis: die Angabe "1" zu kurz sein (um zu vermeiden, casting jedes mal, wie vorgeschlagen, durch den Benutzer Robotnik als Quelle der Verzögerung) scheint nicht zu helfen, z.B.
BEARBEITEN: geändert werden, wie pro Anforderung des Benutzers Hot Licks in den Kommentar, damit rufen Sie das calculate () - Methode mehr als einmal außerhalb der main-Methode.
InformationsquelleAutor der Antwort Federico Giorgi
Gibt es im Grunde keinen Unterschied. Man hat zu "verwirren" die JITC ein wenig, so dass es nicht erkannt wird, dass das Inkrement/Dekrement-Operationen sind selbst Lösch-und dass die Ergebnisse nicht verwendet werden. Tun Sie das und das drei Fällen kommen etwa gleich. (Eigentlich
short
scheint ein kleines bisschen schneller.)Ergebnisse:
InformationsquelleAutor der Antwort Hot Licks
Berechnungen mit einer kurzen Art sind extrem teuer.
Nehmen Sie die folgenden useless loop zum Beispiel:
Wenn es ist kurz, es dauert buchstäblich 1000 mal mehr als wenn es ein int oder ein long-Wert.
Geprüft auf 64-bit-JVM-Versionen 6/7 auf Linux
InformationsquelleAutor der Antwort user2391480