3

私が理解しているように、配列の場合、JAVAは配列のサイズに対してインデックスをチェックします。したがってarray[i]、ループで複数回使用するのではなく、の値を格納する変数を宣言し、array[i]その変数を複数回使用することをお勧めします。

私の質問は、私がこのようなクラスを持っているかどうかです:

public class MyClass(){

    public MyClass(int value){
      this.value = value;
    }

    int value;
}

このクラスのインスタンスを別の場所に作成する場合:( MyClass myobject = new MyClass(7))、オブジェクトの値を複数回使用する必要myobject.valueがある場合、頻繁に使用しても問題ありませんか、それともその値を格納する変数を宣言して複数回使用する方がよいでしょうか。それとも同じでしょうか?

4

3 に答える 3

4

あなたの場合、参照は新しい変数 myobject.valueを参照するのと同じくらい速くて効果的であるため、違いはありません。int

また、JVMは通常、これらの種類のものを最適化することができ、パフォーマンスが非常に重要なコードがない限り、時間をかけて心配する必要はありません。明確で読みやすいコードを書くことに集中してください。

于 2012-09-02T21:19:37.973 に答える
2

簡単な答えはイエスです (実際、配列の場合、インデックスの制限をチェックするだけでなく、探している参照の実際のメモリ位置を計算する必要があります - i=7 のように、のベース位置を取得します配列に 7 つの単語を追加します)。

長い答えは、実際にその値を頻繁に使用し(つまり、大量に使用し)、速度のために実際に制限されていない限り、コードの複雑さを追加する価値がないということです。それに加えて、ローカル変数は、JVM がより多くのメモリを使用したり、キャッシュ障害が発生したりする可能性があることなどを意味します。

一般に、アルゴリズム ( ) の効率についてもっと心配する必要があり、O(n)これらの小さなことについてはあまり心配する必要はありません。

于 2012-09-02T21:21:11.700 に答える
2

Java コンパイラーはボゾではありません。彼はあなたのためにその最適化を行います。通常、指定したすべてのオプション間の速度差はありません。

元のオブジェクトまたはローカル コピーにアクセスするかどうかは常に同じではないため、「通常」と言います。配列がグローバルに可視で、別のスレッドがそれにアクセスしている場合、2 つの形式は異なる結果をもたらし、コンパイラは一方を他方に最適化できません。問題がなくても、何かがコンパイラを混乱させて、問題があるかもしれないと考えさせる可能性があります。その後、法的な最適化は適用されません。

ただし、面白いことをしていない場合、コンパイラはあなたがしていることを見て、変数アクセスを最適化します。本当に、それはコンパイラが行うことです。それがそのためです。

それより少なくとも 1 レベル上を最適化する必要があります。これはあなたのためではありません。

于 2012-09-02T21:39:04.683 に答える