0

この質問はJavaコーディングに関するものです。私の質問は簡単なので、少し例を挙げて説明します:)

引数でいっぱいの文字列配列があり、その長さを数回確認する必要があるため、引数の量 (配列の長さ) を変数に保存するか、毎回長さを呼び出す方がよいでしょうか?変数を格納するとより多くのメモリが消費され、他の方法ではより多くの CPU が使用されます。

例:

String[] arguments = {"a","b","c"};
int numberOfArguments = arguments.length;
if(numberOfArguments == 1)do whatever
if(numberOfArguments == 2)do whatever
if(numberOfArguments == 3)do whatever

また

String[] arguments = {"a","b","c"};
if(arguments.length == 1)do whatever
if(arguments.length == 2)do whatever
if(arguments.length == 3)do whatever

編集:違いが本当に小さいことはわかっています..しかし、私は長いプロセスを求めています。大きく考えて、何百万もの「arguments.length」を考えているので、その場合は、非常に少量のメモリを犠牲にする方がよいと思います常に同じである変数値をチェックするよりも、引数の長さを何百万回もチェックするよりもCPUにとってより良いはずの変数を格納するには、どう思いますか?

4

4 に答える 4

4

これは時期尚早の最適化です。より読みやすく/管理しやすいと思うことは何でもしてください。個人的には、lengthフィールドを直接参照することを好みます。別の変数にフィールドを格納しても意味がないと思うからです (おそらく、プログラムのコンテキストで配列の長さが単に要素の数とは異なる意味を持っている場合を除きます)。そのような場合、適切な名前の変数に格納するのが適切かもしれません)。いずれにせよ、両者の間に大きなパフォーマンスの違いはありませんのでご安心ください。

ちなみに、ローカル変数に長さを格納して代わりにそれを使用するよりも、場合によっては (時間差を確認できると仮定して)高速array.lengthになることもあります。このために特別に予約されたバイトコード オペランドもあります: ( )、途中で行われる最適化は言うまでもありません。bearraylength

于 2013-08-23T22:10:53.137 に答える
0

両方の違いは、1 つの追加の変数を作成することと、配列の長さを取得することです。違いは、このコードの使用方法によって異なります。

このクラスの数百万のインスタンスを作成すると、最初のアプローチで数百万の変数が作成され、最初のアプローチでより多くのメモリが使用されていると考えることができます。

配列の長さの読み取りは高価ではないため、一言で言えば、このコードがプロジェクトでどのように使用されているかによって異なります。

長さは変数を作成するために複数回使用されるため、すべてを脇に置いておくことをお勧めします。

乾杯 !!

于 2013-08-23T22:29:25.963 に答える