2017-04-21 8 views
-1

たとえば、顕微鏡でコードを見ると、この最初のコードブロックは2番目のコードブロックよりも計算時間が長くなりますか?Java 8 - 多くのメソッドを持つために、より多くのリソースを消費しますか?

コードブロック1:

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

コードブロック2:

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

かなりシンプルですが、私はここで誰もが価値がこれを考慮しているかを知っているかどうかを確認するために探しています(たとえば、最適化最小の計算時間のためのプログラム)。

例として、回路のゲートには有限の「デルタ遅延」があり、回路のクロック速度を設計時に考慮する最大遅延を見積もることができます。 Javaにはデルタ遅延と同様のものがありますか?

+12

これが最も重大なパフォーマンス上の問題であることをベンチマークすることによって証明できるまで、時間を無駄にしないでください。より良いと判断した場合、JITはメソッドをインライン展開します。読みやすくメンテナンス可能なコードを書くことに焦点を当てるべきです。 –

+3

実際に短い方法を使用してパフォーマンスを得ることができます。一度私は非常に長いメソッドを手動で分割し、40%のスピードを得ました。 JITはメソッドをインライン化できますが、メソッドのアウトライン化はできません。したがって、可読性とパフォーマンスはしばしば確実に相関します。 – maaartinus

答えて

6

多分、おそらくそうではありません。インライン化と呼ばれるプロセスを通じて、JVMは最初のコードをあたかも2番目のコードとして実行することができます。 What is method inlining?

とにかく、自明ではないアプリケーションを書くときは、パフォーマンスの向上を最小限にするのではなく、可読性と保守性に焦点を当てるべきです。ほとんどの場合、資源使用量の違いはほとんど見られません。一方、人間の読者にとっては、あまりにも多くの異なることをする長い方法が本当の痛みになる可能性があります。

4

これは実際にはmethod2()にあるものと、スタック上でいくつのパラメータが実行されているかによって異なります。経験則によれば、コード保守性を減らしてメソッドを結合することは決して良い考えではありません。スピードの稀少な節約は統計的なばかげきに近く、ロジックのバグや減速の可能性ははるかに高くなります。

実際にパフォーマンスがそれほど気になる場合は、JMHとマイクロベンチマークについて学習することをおすすめします。 this tutorial。それは非常に明らかになり、時間とともに特定のパターンについて学びます。

など。特定のスタイルでコーディングすると、データが完全にCPUキャッシュに存在し、スピードアップのオーダーと、最悪の場合絶対的なパーセンテージポイントを要する追加のメソッド呼び出しが提供される可能性があります。

関連する問題