2010-11-23 46 views
1

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.

+7

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

+0

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

+0

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

Antwort

3

Im Allgemeinen sollten sie gleich sein. (Mit die gleiche definiert als nahe genug, dass es nie Rolle)

ich sehr stark würde behaupten, dass Sie Ihre Absicht kodieren sollte (dh die statische mit vs nicht-statisch-ness durch, ob diese definiert ist ein Klasse konstant im Vergleich zu einer Instanz konstant), anstatt eine beliebige „Leistungssteigerung“

Wenn Sie feststellen, dass dies ein erhebliches Performance-Problem ist (und nachdem Sie es nur messen!), ich es als Compiler einstufen/JVM-Fehler und setzen Sie die Problemumgehung (Swaping seine Static-Ness) an Ort und Stelle, mit einem Kommentar, warum.

+0

Ich vertausche nicht die Statik, ich tausche Finalität. Und ich stimme dir normalerweise zu, dass der Unterschied vernachlässigbar ist, aber auf der anderen Seite haben wir diesen Kerl von RIM, der sagt, dass es nicht ist. Sie haben 7000+ Punkte auf SO, aber dieser Typ ist möglicherweise ein Co-Autor der VM selbst. Wen sollte ich glauben? –

+0

Antwort: Ich sollte den Benchmark und nur den Benchmark glauben. Ja, ich weiß. Es handelt sich jedoch nicht um einen spezifischen Leistungsgewinn. Hier geht es darum, einen Programmierstil zu wählen, den mein gesamtes Team in Zukunft verwenden kann. Ich sollte nicht Benchmarks ausführen müssen, wenn ich die Vor- und Nachteile beider Methoden abwägen und eine davon basierend auswählen kann ... –

+0

@Neil Traft: Du solltest meine Antwort nicht basierend auf meinem Rep bewerten :) Das heißt, es ist Leistungsverbesserungen basierend auf veralteten Informationen sind sehr einfach.Wenn die nächste Version kommt und ihre Compiler-/VM-Langsamkeit behebt, wird vielleicht der Leistungsgewinn umkehren! Man weiß nie. Deshalb sage ich, du solltest es messen, um zu sehen, ob es zu langsam ist, bevor du überhaupt darüber nachdenkst. –

Verwandte Themen