2017-04-21 2 views
-1

Wenn zum Beispiel der Code unter einem Mikroskop betrachtet wird, benötigt dieser erste Codeblock mehr Rechenzeit als der zweite Codeblock?Java 8 - Benötigt es mehr Ressourcen für viele Methoden?

Codeblock 1:

method1() { 
do something; 
call method2; 
} 
method2() { 
do something simple like assign a variable value; 
} 

Codeblock 2:

method1(){ 
do something; 
do something simple like assign a variable value; 
} 

Ziemlich einfach, aber ich bin auf der Suche, um zu sehen, ob jemand hier weiß, was der Wert ist dies bei der Prüfung (zB Optimierung ein Programm für minimale Rechenzeit). Als Beispiel habe ich gelernt, dass Gatter in einer Schaltung eine endliche "Delta-Verzögerung" haben, in der es möglich ist, zu addieren, um die maximale Verzögerung zu sehen, die die Schaltung haben wird, wenn die Taktgeschwindigkeit in dem Entwurf berücksichtigt wird. Hat Java etwas Ähnliches wie die Delta-Verzögerung?

+12

Verschwenden Sie keine Zeit damit, sich Sorgen zu machen, bis Sie durch Benchmarking beweisen können, dass dies das bedeutendste Leistungsproblem ist, das Sie haben. Der JIT wird Inline-Methoden verwenden, wenn er feststellt, dass dies besser ist. Sie sollten sich darauf konzentrieren, lesbaren, wartbaren Code zu schreiben. –

+3

Sie können Leistung tatsächlich erzielen, indem Sie kurze Methoden verwenden. Sobald ich eine sehr lange Methode manuell geteilt habe und 40% Geschwindigkeit gewonnen habe. Das JIT kann Inline-Methoden, aber keine "Outline" -Methoden verwenden, so dass Lesbarkeit und Leistung oft positiv korreliert sind. – maaartinus

Antwort

6

Vielleicht, vielleicht nicht. Durch einen Prozess, der Inlining genannt wird, kann die JVM den ersten Code so ausführen, als wäre er der zweite. Siehe What is method inlining?

Wie auch immer, wenn Sie nicht-triviale Anwendungen schreiben, sollten Sie sich auf Lesbarkeit und Wartbarkeit konzentrieren und nicht auf minimale Leistungssteigerungen. In den meisten Fällen wird der Unterschied in der Ressourcennutzung kaum, wenn überhaupt, bemerkbar sein. Für den menschlichen Leser hingegen kann eine lange Methode, die zu viele verschiedene Dinge tut, ein echter Schmerz sein.

4

Es hängt wirklich davon ab, was in method2() ist und wie viele Parameter auf dem Stapel gehen. Die Faustregel ist, dass das Kombinieren von Methoden durch Reduzieren der Wartbarkeit von Codes niemals eine gute Idee ist, die seltenen Einsparungen in der Geschwindigkeit nahe bei statistischen Zufallszahlen liegen, während die Wahrscheinlichkeit, Fehler oder Verlangsamungen in der Logik einzuführen, viel höher ist.

Wenn Sie wirklich so viel Wert auf Leistung legen, schlage ich vor, dass Sie über JMH und Micro-Benchmarking mit z. this tutorial. Es wird sehr aufschlussreich sein und mit der Zeit wirst du über bestimmte Muster lernen.

z. Durch die Codierung in einem bestimmten Stil können Ihre Daten vollständig in CPU-Caches gespeichert werden, wodurch sich die Geschwindigkeit um Größenordnungen erhöht, im Gegensatz zu einem zusätzlichen Methodenaufruf, der im schlimmsten Fall einen Bruchteil eines Prozentpunkts erfordert.

Verwandte Themen