行ごとにすべてを実行する代わりにメソッドを使用する方がはるかに明確であることを私は知っているので、この仮定を分解してみましょう。
生成されたバイトコードが同じであると想像して、メソッドを呼び出すのと同じことを行うのに(メソッドの呼び出しに)もっと時間がかかるかどうかを自問していました。
行ごとにすべてを実行する代わりにメソッドを使用する方がはるかに明確であることを私は知っているので、この仮定を分解してみましょう。
生成されたバイトコードが同じであると想像して、メソッドを呼び出すのと同じことを行うのに(メソッドの呼び出しに)もっと時間がかかるかどうかを自問していました。
理論的には、はい、ほとんどの場合、計算を実行するための新しいスタックフレームを作成しています。実際には、パフォーマンスの低下に気付くことはほとんどありません。この質問の完全な議論はもう少し複雑であり、生成されたバイトコードとそれが実行されているマシン/仮想マシンの内部パフォーマンスと関係があります。
1.メソッドを呼び出すと、実行コードの行、ローカル変数、プログラムカウンター、および非静的の場合は「this」を含むランタイムスタックが作成されるため、引数は特定の制限に達します。 「また。
2.しかし、これはHighSpeedプロセッサと強力なIDEには影響を与えません。
3.さらに、この方法を使用していない場合は、DRY Principle(Dont Repeat Yourself)の違反となり、すべての情報と行動を1つの適切な場所に保管する必要があると規定されています。
コードをスキャンしてメソッドを見つけて実行する必要があるため、シリアルプログラム(ステップバイステップ)はメソッドの実行よりも高速です。ただし、この時間はパフォーマンスに影響を与えるには小さすぎます。
確かに、コードをモジュール化することは良い考えであり、パフォーマンスに目立った違いをもたらすことはないはずです。
それ外。テクノロジーではなく、人間の本性に関係しているという理由で、それは非常に大きな違いを生む可能性があります。
次のような行を見るのは自然です
a = b + c;
と
Foo(bar);
費用はほぼ同じだと思いますが、おそらくそうではありません。
問題は、メソッドは、追加のメソッド呼び出しを含む、追加のコードの磁石であるということです。
次に、パフォーマンスチューニングを行っているときに見つけたのは、スタックサンプルを取得することです。これは、20〜30レベルの深さになることも珍しくありません。スタックサンプルの各呼び出しを調べると、ほぼすべての呼び出しが完全に理にかなっています。
ほぼ。
必要なのは、パフォーマンスを完全に吹き飛ばすために、それらの20〜30のうちの1つのそれほど必要ではない呼び出しです。わずか2つのスタックサンプルでそのようなことが見られれば、最適化の大きなチャンスを見つけたと思います。たとえば、3つのサンプルを取得し、そのうちの2つで確認した場合、節約できる時間の割合は2/3付近になります。言い換えれば、スピードアップ係数は3倍の範囲である可能性があります。