[JAVA] Punkt 67: Mit Bedacht optimieren

67. Die Optimierung sollte mit Vorsicht erfolgen

Streben Sie ein besseres Programm als ein schnelles Programm an

Es gibt ein langjähriges Sprichwort, das die Programmoptimierung dazu ermutigt, nicht einfach zu sein.

Zerstören Sie keine gesunde Architektur zur Optimierung. Wenn eine fehlerfreie Architektur beibehalten wird, sollten die einzelnen Komponenten nur spärlich miteinander verbunden sein und können später geändert werden, ohne andere zu beeinflussen.

Das bedeutet nicht, dass Sie nicht über die Leistung nachdenken müssen, bis das Programm abgeschlossen ist. Es ist fast unmöglich, Fehler in populären Architekturen zu beheben. Daher ist es notwendig, die Leistung in der Entwurfsphase ausreichend zu berücksichtigen.

Vermeiden Sie Designs, die die Leistung einschränken

Beim Entwerfen einer Komponente ist es am schwierigsten, die Grenze zwischen der Außenwelt und der Komponente zu ändern, wenn erst einmal entschieden ist. Das Hauptbeispiel ist

Denken Sie an die Leistung beim API-Design

Beim API-Design müssen wir über die Leistung nachdenken.

Beispielsweise soll die getSize-Methode der Klasse java.awt.Component bei jedem Aufruf eine veränderbare Dimensionsschnittstelle generieren, was sich auf die Leistung auswirkt.

Ursprünglich sollte Dimension unveränderlich sein (Punkt 17). Außerdem sollte die Methode getSize durch zwei Methoden ersetzt worden sein, die Komponenten für einzelne Dimensionsobjekte zurückgeben (es kommt nicht). Tatsächlich verfügt die Component-Klasse in Java2 über eine solche Methode, aber Code, der seit einiger Zeit getSize verwendet, weist immer noch Leistungsprobleme auf.

Im Allgemeinen bringt ein gutes API-Design eine gute Leistung mit sich. ** Es ist umständlich, die API zu verzerren, um die Leistung zu verbessern. ** **. Die dort erzielten Leistungssteigerungen können durch zukünftige Plattformänderungen zunichte gemacht werden, aber die Schwierigkeit, eine verzerrte API aufrechtzuerhalten, muss immer vorhanden sein.

Optimierung

Wenn nach erfolgreichem Design und Implementierung noch eine Leistungsverbesserung erforderlich ist, versuchen Sie die Optimierung.

Leistung messen

Es ist notwendig, die Leistung vor und nach der Optimierung zu messen. Da es schwierig ist vorherzusagen, welche Programmausführung lange dauert, werden wir die Optimierung während der Messung fortsetzen, um keine Zeit zu verschwenden.

Profiling-Tool

Mit dem Profiling-Tool können Sie sehen, welche Methode wie lange dauert und wie oft sie aufgerufen wird. Zu diesem Zeitpunkt können Sie sehen, ob die Algorithmusauswahl korrekt ist. Abhängig von der Wahl des Algorithmus ändert sich die Leistung dramatisch.

Es gibt auch ein Tool namens JMH, bei dem es sich um ein Micro-Benchmarking-Framework handelt. Auf diese Weise können Sie detaillierte Leistungsinformationen in Ihrem Java-Code anzeigen.

Die Notwendigkeit der Messung in Java

Die Leistungsmessung in Java ist notwendiger als in älteren Sprachen wie C und C ++. Dies liegt daran, dass zwischen der von der CPU ausgeführten Verarbeitung und dem, was im Code ausgedrückt wird, im Vergleich zu diesen Sprachen eine große Lücke besteht.

In Java variiert die Leistung je nach Implementierung, Release-Version und Prozessor. Wenn Sie feststellen, dass es auf verschiedenen Plattformen ausgeführt wird, ist es wichtig, die Leistung in jeder Umgebung zu messen. Infolgedessen treten häufig Leistungskompromisse für jede Umgebung auf.

Da die Umgebung, in der Java ausgeführt wird, immer komplexer wird, wird die Leistung weniger vorhersehbar. Daher kann gesagt werden, dass der Bedarf an Messungen zunimmt.

Recommended Posts

Punkt 67: Mit Bedacht optimieren
Punkt 55: Optionen mit Bedacht zurückgeben
Punkt 52: Verwenden Sie Überladung mit Bedacht
Punkt 53: Verwenden Sie Varargs mit Bedacht
Punkt 45: Verwenden Sie Streams mit Bedacht
Punkt 83: Verwenden Sie die verzögerte Initialisierung mit Bedacht
Punkt 66: Verwenden Sie native Methoden mit Bedacht
Punkt 32: Kombinieren Sie Generika und Varargs mit Bedacht