将字段移动到局部变量的好处

时间:2015-12-16 09:27:38

标签: java android performance

代码就像这样

public class Universe {//abstract layer for life game

    public static final int SIZE = 100;
    private int[][] universe;
    private int[][] prev_universe;

    public Universe() {
        //Initializing Universe
        universe = new int[SIZE][SIZE];
        prev_universe = new int[SIZE][SIZE];
        initializeTiles();
    }//Universe()

//////
///various stuff
////

    public void doStep(){

        //backup the current state of the universe
        for(int i = 0; i < Universe.SIZE; i++) {
            prev_universe[i] = universe[i].clone();
        }


        //process data in "universe"




            //check if universe has changed
            if(deepEquals(universe, prev_universe)){
                    Log.d("CKdebug", "system is stable!");
                systemStable = true;
                }

        }

    }//class Universe

一切都很好,但我对一件事感到好奇。我除了prev_universe以外的其他任何地方都没有真正使用doStep(),以检查universe的状态是否已更改。我想我可以把它变成一个局部变量。 问题是,它在内存消耗方面是否有益,并且由于每次prev_universe doStep()不断重建大型数组NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY children.@distinctUnionOfArrays.children.name contains[cd] %@",searchText]; ,它会增加系统(CPU或其他)的负载。叫什么名字?什么是更好的做法?

1 个答案:

答案 0 :(得分:3)

如果prev_universe仅在单个方法中使用,则该方法应该是私有的。预分配一个小阵列(100x100很小)你不会获得太多收益。

通过使prev_universe成为实例变量,您可能会在其他方法中重复使用它,这可能导致难以跟踪的错误(如果其他方法不将其视为本地变量,并依赖于其现有状态,每次调用doStep()时都会重置该状态。