我的类的一个方法需要一些数组的新副本用于内部的东西,所以我应该写这样的东西:
public void FrequentlyCalledMethod {
int[] a = new int[100];
....
但是因为方法经常被调用,并且因为数组的内容没有意义(无论如何都会被替换)并且因为数组足够大我想要优化并编写类似的东西:
private int[] a = new int[100];
public void FrequentlyCalledMethod {
....
假设该方法每秒调用100次,我将每秒节省大约100 * 100 * sizeof(int)字节的堆内存。
问题是现在类声明是“脏”的。它包含现场只有一种方法所需的信息。拥有太多这样的字段会使类非常“不可读”,因为“正常”字段将与“性能优化”字段混合在一起。
我该怎么办?或者我应该选择性能还是可读性?我能以某种方式得到这两个吗?
答案 0 :(得分:0)
如果是第一种情况,FrequentlyCalledMethod
内的数组是使用局部变量引用的,那么当方法结束时它将被垃圾收集:在该场景中没有堆过量使用。
但是,如果将数组声明为成员属性;即使方法FrequentlyCalledMethod
被调用,数组实例也会持续所有父对象生命。
总之,如果你想保留堆空间并使你的程序更有效,请使用本地属性并避免在特定情况下使用实例变量。
答案 1 :(得分:0)
否您的班级声明不脏。 类声明只有在破坏其公共接口时才会变脏。这是一个私有字段。专用字段用于此目的。
如果你太担心太多私有变量,那么尝试使用小类。如果方法需要3个私有变量,则可以使用这3个变量创建一个类,并将该对象存储为当前类中的私有字段。
class A{
private int a;
private int b;
private int c;
public int get_num(){
return a+b+c;
}
}
你可以使用它,
class B{
private int a;
private int b;
private int c;
public int get_num(){
return a+b+c;
}
}
class A{
private B b;
public int get_num(){
return b.get_num();
}
}