假设我有一个 java 类(我们将调用它ThatClass
),其中包含很多静态最终字段(尽管它们都不是值字段),并且假设我从一个类中的方法访问了很多这些字段,每个字段很多次我们会打电话ThisClass
。考虑到内存使用和性能都很关键的情况,是否值得将静态最终字段存储在as 字段的ThatClass
方法中?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.
*/
}
我知道我不需要将这三个字段作为Bar
实现 B 中的方法的参数传递,但为了便于讨论,假设这是必要的。
问题:
两种实现之间的性能有什么区别吗?B比A快吗?
关于内存成本,B比A需要更多的内存?我想它确实如此,但只是多一点(B中每个额外字段的一个额外引用。每个引用都是一个int的大小,对吗?)
谢谢!