Macht die Verwendung von Entwurfsmustern Java-Code langsam? Wenn ich zusätzliche Schnittstellen und Syntaxkonstruktionen (wie Klassenumbruch) verwende, werde ich gut organisiert, aber langsamer Code oder das macht meinen Code nicht wesentlich langsamer?
Dies wird nicht Ihren Code erheblich verlangsamen. Da einige Funktionsaufrufe in zusätzliche Klassen oder Methoden eingeschlossen sind, sind einige Methodenaufrufe ein wenig langsamer, aber ein Mensch wird dies nicht bemerken. Es geht um Nano-Sekunden. Immer bevorzugen sie den Vorteil von gut lesbarem und wiederverwendbarem Code.
Ich bin eine Hochleistungsanwendung, sollten Sie Ihren Code auf eine höhere Leistung umgestalten nachdem basierend auf Mustern entwerfen und implementieren. Aber normalerweise wird das nicht benötigt.
Und wie immer: Es hängt vom verwendeten Muster und dem Anwendungsfall Ihres Programms ab.
Wenn Sie Ihrer Denkrichtung folgen, sollten Sie niemals Java verwenden, da es voll von Abstraktionsschichten ist, die es einfacher machen, korrekten und wartbaren Code zu schreiben, aber seine Geschwindigkeit unter die Geschwindigkeit von Assembler oder C reduzieren Sie machen sich Sorgen über Wrapper, die Ihren Code deutlich langsamer machen. Wahrscheinlich haben Sie einen Anwendungsfall, der C besser als Java macht.
Auf der anderen Seite sollten Sie definitiv darauf achten, dass Sie keine Überladungen von Mustern auf jedes Problem setzen, das Sie in Ihrem Code sehen. Verwenden Sie Muster mit Bedacht, wo Sie den Nutzen deutlich sehen können, nicht nur, wo Sie sehen, dass ein Muster theoretisch passen könnte.
Ich programmiere lieber Code, um zuerst die einfachste, dümmste Lösung zu finden, die mein unmittelbares Problem löst. Wenn ich später noch eine oder zwei ähnliche Funktionen hinzufügen muss, die zu Code-Duplikation oder anderen Code-Gerüchen führen, dann denke ich über die Einführung eines geeigneten Musters nach.
Schnittstellen machen Ihren Code klarer und einfacher in der Zukunft zu ändern, haben aber keinen Einfluss auf die Geschwindigkeit, da sie nur existieren, um dem Compiler mitzuteilen, wie Ihr Code zusammenpasst.
Entwurfsmuster sind häufig auftretende Lösungen für häufig auftretende Probleme. Wenn Sie das Problem haben, verwenden Sie eine der bekannten Lösungen. Wird es Ihr Programm langsamer machen? Es hängt von den Möglichkeiten ab, die Sie zwischen den verfügbaren Lösungen treffen. Sie müssen die Kompromisse jedes Musters verstehen, um die Wahl zu treffen.
Aber ohne eine Entwurfsmusterlösung zu verwenden, benutzen Sie Ihre eigene selbstgebaute DIY Lösung; wenn wir dies tun, lösen wir das Problem normalerweise nicht so gut oder so schnell (in unserer Zeit und in der Maschinenzeit) oder wie verständlich für die zukünftige Wartung. Dieser letzte Punkt ist, weil Entwurfsmuster uns eine neue Art des Sprechens über Probleme und Lösungen geben. Sobald wir dieses neue Vokabular verstehen, können wir komplexere Proleme leichter lösen.
Also machen sie Ihr Programm langsamer? Nein, sie lassen es funktionieren. Schneller.
Viel Spaß beim Lesen Ihrer Muster. Sie machen mehr Sinn, wenn Sie ein tatsächliches Problem lösen müssen.
Wie schon gesagt, der Aufwand für die Verwendung von Designmustern ist unbedeutend, und schauen Sie sich die Codequelle einiger Java-Projekte an, in denen die Leistung benötigt wird, wie android, und Sie werden sich wundern, dass alle von ihnen Verwenden Sie stark Entwurfsmuster.
Allerdings könnten einige Design-Optionen Einfluss auf die Leistung haben, wie zum Beispiel die Verwendung von List anstelle von hashmap, wo die Karte besser geeignet ist.
Idealerweise sollten Sie sich bei der Verwendung zugelassener Programmierkonstrukte keine Gedanken über die Leistung machen. JVM ist gut darin, den Code optimiert zu halten. Die meisten Leistungsprobleme entstehen im Allgemeinen durch den Code, in dem wir Code schreiben, der sich auf die Thread-Synchronisation bezieht, und wo wir I / O wie DB-Aufrufe machen. Mit wenigen zusätzlichen Schnittstellen und Klassen, um Ihr Design modular und ordentlich zu machen, wird es nicht schaden. Möglicherweise müssen Sie vorsichtig sein, wenn Sie Ihre eigenen Frameworks schreiben, die auf der Verwendung von Reflexionen und anderen erweiterten Funktionen basieren. Wenn Sie dies suboptimal tun, riskieren Sie, Leistungsengpässe hinzuzufügen.
In den meisten Fällen macht zusätzlicher Code-Wrapping Code etwas langsamer. Aber in einigen Fällen stimmt das nicht. Wenn Sie 1 Milliarde Iterationen iterieren, kann das zusätzliche Wrapping erheblich langsamer sein. Gute Praxis besteht darin, zuerst gut lesbaren und wiederverwendbaren Code zu schreiben. Und erst danach versuchen Sie, den Code zu profilieren und zu optimieren. Oftmals benötigen Sie den Change-Computing-Algorithmus, aber manchmal müssen Sie den Workaround-Code schreiben.
Vielleicht. Wie üblich, gibt es keine einfachen Antworten, wenn es zu einem Kompromiss kommt.
Sie haben festgestellt, dass die Verwendung eines bestimmten Musters den Code klarer macht, aber dies kann auf Kosten einer Leistungseinbuße gehen. Also, was machst du? Sie verwenden Ihr bestes Urteilsvermögen. Oft ist es möglich, zuerst das Muster zu testen und dann zu testen, ob das schnell genug ist, und dann nach Bedarf zu optimieren. Manchmal wissen Sie bereits, dass es so schnell wie möglich sein muss, oder umgekehrt, dass der Code nicht performancekritisch ist.
Tags und Links java design-patterns performance