0

我班的一种方法需要一些数组的新副本来存储内部的东西,所以我应该写这样的东西:

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

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

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

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

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

我能做些什么?还是我应该选择性能或可读性?我可以同时拥有两者吗?

4

2 回答 2

0

如果是第一种情况,内部的数组FrequentlyCalledMethod 是使用局部变量引用的,所以当方法结束时它将被垃圾收集:在那种情况下没有堆过度使用。

但是,如果您将数组声明为成员属性;数组实例将在您的所有父对象生命周期中持续存在,即使该方法FrequentlyCalledMethod 是否被调用。

总之,如果您想保留堆空间并提高程序的内存效率,请使用本地属性并在您的特定情况下避免使用实例变量。

于 2012-04-30T06:57:32.060 回答
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();
    }
}
于 2012-04-30T07:00:10.980 回答