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.
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
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.
Wenn nach erfolgreichem Design und Implementierung noch eine Leistungsverbesserung erforderlich ist, versuchen Sie die Optimierung.
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.
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 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