2012-04-09 4 views
0

Gibt es eine Laufzeitleistungsdifferenz zwischen öffentlichen und privaten Variablen/Methoden?Runtime-Performance von Public vs Private in Java

Ich weiß, dass es als gute Praxis angesehen wird, die Dinge nach Möglichkeit privat zu halten, aber gibt es Gründe für die Optimierung.

+0

Nein, und Nein. Weil ich 15 Zeichen eingeben muss. –

Antwort

1

Wie die meisten dieser Fragen würde ich sagen; schreibe klaren, einfachen Code und es wird auch gut funktionieren.

Wenn Ihnen jemand aus Performancegründen sagt, dass etwas eine gute Idee ist, stellen Sie sicher, dass dies mit reellen Zahlen gesichert ist. Dies gilt immer noch für die Java-Version, die Sie verwenden (ein großer Teil davon ist veraltet). und es ist für Ihre Bewerbung geeignet.

Oft „Performance-Gründen“, ist ein Vorwand, obskuren Code zu schreiben, wenn tatsächlich kann es nicht schneller sein oder kann sogar viel langsamer sein (wie es die JVM optimiser verwirrt, so wie es Sie verwirren)

Einige Leute sind so skeptisch gegenüber Leistungsoptimierung, dass Sie das Zitat "vorzeitige Optimierung ist die Wurzel allen Übels" haben. Dies ist eine Übertreibung, aber es ist eine gute Warnung, sich nicht um Performance-Bedenken zu sorgen, es sei denn, Sie wissen wirklich, dass Sie die Leistung verbessern müssen und deine Änderungen machen wirklich einen Unterschied.

Zu dieser spezifischen Frage können Sie eine private Methode nicht von einer anderen Klasse aufrufen. Sie können also grundsätzlich nicht von einer anderen äußeren Klasse und von einer anderen Klasse in der gleichen äußeren Klasse und einem Accessor, der normalerweise inlined wäre, wenn er genug genannt wird, erstellt werden.

+0

Danke für die Antwort. Ich wollte in der Lage sein, fundierte Entscheidungen zu treffen, während ich das Programm schreibe. Ich habe mich gefragt, ob es Auswirkungen auf die Müllsammlung usw. haben könnte. – Jamie

+0

Nein, absolut keine. Ich würde mich auch nicht um GC-Probleme kümmern, wenn Sie nicht wissen, dass Sie ein Problem haben, weil Sie gemerkt haben, dass Sie wirklich ein Problem haben. z.B. Sie haben einen Speicherprofiler verwendet. –

+0

Kurz gesagt mit 12 Jahren Erfahrung Tuning Java-Anwendungen, würde ich immer noch nicht auf meine Vermutungen verlassen, was ein Programm schneller machen wird. Ich schätze, was ich als nächstes testen soll, aber ich teste es immer noch auf verschiedene Arten, um sicherzugehen, dass ich den richtigen Ansatz habe. –

0

Ich glaube nicht, dass es direkt ist. Zugriffsmodifizierer sind aus meiner Sicht sowieso eher eine Kompilierungszeit.

Auch wenn es war, geh nicht so, es gibt einen sehr guten Grund (mehrere von ihnen wahrscheinlich), dass du Klassenfelder nicht veröffentlichen solltest.

Es gibt eine unglaublich kleine Leistung Auswirkungen, weil Sie die Getter-und Setter-Methoden für ein Feld aufrufen müssen, aber wenn Sie komplexe Operationen dort tun, wird es definitiv nicht auffällig sein. Es ist höchstens eine Millisekunde.

+1

Sie müssen keine Getter und Setter verwenden, aber dies nicht zu tun, wird die Leistung im Allgemeinen nicht verbessern, und der Unterschied für etwas, das so geringfügig ist, ist wahrscheinlich im schlimmsten Fall Nano-Sekunden. Es kann sogar eine Sub-Nanosekunde sein, was es sehr schwierig macht, sogar zuverlässig zu messen. –

0

Es gibt keinen Unterschied Laufzeitleistung zwischen privaten und öffentlichen Variablen/Methoden.Es hängt nur von Ihren Programmanforderungen ab. Wenn Sie zum Beispiel eine Methode haben, die für das gesamte Programm benötigt wird, sollten Sie die public-Methode verwenden. Dadurch wird die Code-Duplizierung reduziert. Aber Sie haben eine Methode, die nur eine Klasse benötigt, dann sollten Sie private Methode verwenden.

Verwandte Themen