java - 将字段移至局部变量的好处

标签 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的状态是否已经改变。我想我可以把它变成一个局部变量。 问题是,它在内存消耗方面是否有益,是否会因不断重新制作大型数组而增加系统(CPU 或其他)的负载 prev_universe每次doStep()叫做?更好的做法是什么?

最佳答案

如果 prev_universe 仅在单个方法中使用,则它应该是该方法私有(private)的。预分配一个小数组(100x100 很小)不会给您带来太多好处。

通过将 prev_universe 设置为实例变量,您将面临在其他方法中重复使用它的风险,这可能会导致难以跟踪的错误(如果其他方法不处理它)作为局部变量,并依赖于其现有状态,每次调用 doStep() 时都会重置)。

关于java - 将字段移至局部变量的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34308242/

相关文章:

android - 嵌套的 RecyclerView 的高度为 “wrap_content”,包含大量项目

java - 显着优化 for 循环中的字节操作(通过避免循环?)

java - 从 onPostExecute 调用其他类中的方法

java - 登录到远程 mysql 数据库的身份验证

java - 如何等待多个对象

unit-testing - 是否有更快的 MS Test Runner

javascript - 重排音频节点能保证无缝播放吗?

java - xpath java 的数字节点列表错误

Android LVL License 检查无法绑定(bind)到服务

java - 尝试通过单击另一个 Activity 的复选框来更改 Activity 的背景颜色