缓存在不属于类的私有字段数组中是否有意义?

时间:2012-04-30 06:49:17

标签: oop

我的类的一个方法需要一些数组的新副本用于内部的东西,所以我应该写这样的东西:

public void FrequentlyCalledMethod {
    int[] a = new int[100];
    ....

但是因为方法经常被调用,并且因为数组的内容没有意义(无论如何都会被替换)并且因为数组足够大我想要优化并编写类似的东西:

private int[] a = new int[100];
public void FrequentlyCalledMethod {
    ....

假设该方法每秒调用100次,我将每秒节省大约100 * 100 * sizeof(int)字节的堆内存。

问题是现在类声明是“脏”的。它包含现场只有一种方法所需的信息。拥有太多这样的字段会使类非常“不可读”,因为“正常”字段将与“性能优化”字段混合在一起。

我该怎么办?或者我应该选择性能还是可读性?我能以某种方式得到这两个吗?

2 个答案:

答案 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();
    }
}