ThatClass
多くの static final フィールド (値フィールドはありません) を持つ Java クラス (これを と呼びます) があるとします。お電話いたしますThisClass
。メモリの使用とパフォーマンスの両方が重要な状況を考えると、as フィールドThatClass
のメソッド内で使用されるstatic final フィールドを格納する価値はありますか?ThisClass
ThisClass
例:
public class ThatClass
{
public static final Foo field1 = new Foo();
public static final Foo field2 = new Foo();
public static final Foo field3 = new Foo();
}
//implementation A
public class ThisClass
{
public ThisClass()
{
for (int i = 0; i < 20; ++i)
{
Bar(ThatClass.field1, ThatClass.field2, ThatClass.field3);
}
}
public void Bar(Foo arg1, Foo arg2, Foo arg3)
{
// do something.
}
/* imagine there are even other methods in ThisClass that need to access the
* fields of ThatClass.
*/
}
今、この他の実装ThisClass
//implementation B
public class ThisClass
{
private final Foo myField1;
private final Foo myField2;
private final Foo myField3;
public ThisClass()
{
myField1 = ThatClass.field1;
myField2 = ThatClass.field2;
myField3 = ThatClass.field3;
for (int i = 0; i < 20; ++i)
{
Bar(myField1, myField2, myField3);
}
}
public void Bar(Foo arg1, Foo arg2, Foo arg3)
{
// do something.
}
/* imagine there are even other methods in ThisClass that need to access the
* fields of ThatClass.
*/
}
実装 Bのメソッドの引数として 3 つのフィールドを渡す必要がないことはわかっていますがBar
、この説明のために、それが必要だったと想像してください。
質問:
2 つの実装のパフォーマンスに違いはありますか? B は A より速いですか?
メモリ コストに関して、B は A よりも多くのメモリを必要としますか? そうだと思いますが、もう少しだけです(Bの追加フィールドごとに1つの追加参照。各参照はintのサイズですよね?)
ありがとう!