Ich habe gerade einen Artikel in der BlackBerry-Dokumentation über writing efficient code in J2ME gelesen.Sind nicht endgültige statische Strings effizienter als statische finale Strings?
In diesem Artikel gibt es einen Abschnitt, der Ihnen rät, "statische Variablen für Strings zu verwenden." Die Schlussfolgerung ist, dass, da der Compiler inline static final
als String-Literale referenziert, es besser ist, es nicht-final zu belassen (ich nehme an, dass das Abrufen einer statischen Referenz billiger ist als das Abrufen aus dem String-Pool?).
Stimmt das für alle JVMs? Mein Chef bei meinem letzten Job hämmerte es uns in den Kopf, dass wir immer, immerstatic final
für unsere Konstanten verwenden sollten. Wir haben Embedded-Programmierung in Java gemacht, also war er ein echter Verfechter der Performance (obwohl ich mir in diesem Fall nicht sicher bin, ob er sich mehr mit Speicher oder Geschwindigkeit beschäftigt). Mein Chef macht seit Jahren Java und kennt seine Sachen wirklich, also habe ich seinen Ratschlag angenommen; Jetzt bekomme ich widersprüchliche Ratschläge!
Also welches ist wirklich besser? Sie können entweder aus einer Speichererhaltungsperspektive oder einer Geschwindigkeitsperspektive und entweder für J2ME oder J2SE antworten.
Sie sollten wahrscheinlich statische final verwenden. Lassen Sie die Maschine tun, was sie tut, um festzustellen, ob etwas inline sein sollte. Wenn Sie sich Sorgen machen über die Leistung einer Inlining-Zeichenfolge im Vergleich zu einem Aufruf, ist Java wahrscheinlich nicht die richtige Sprache, um in – Falmarri
zu arbeiten. Wenn Sie die Benutzeroberfläche für Android oder BlackBerry programmieren, haben Sie keine Auswahl an Sprachen . Aber darüber hinaus ist es immer besser zu wissen, was unter der Haube passiert! Komm schon, Mann, es ist eine Frage des Prinzips! Du gehorchst nicht den Maschinen, die Maschinen gehorchen dir! Warum ist das ein Kommentar und keine Antwort? –
Richtig, dass Sie keine Wahl in Sachen wie Android haben, aber dann Inlining Strings ist BY FAR nicht der Flaschenhals, es ist die 60 anderen Anwendungen, die im Hintergrund laufen, die sind. Außerdem ist es sicher besser zu wissen, was unter der Haube passiert, aber mit Sprachen wie Java kann man das wirklich nicht, da es an der virtuellen Maschine liegt, mit dem Code zu machen, was er will. – Falmarri