Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:创建大量新对象_Java_Performance_Object_Creation - Fatal编程技术网

Java:创建大量新对象

Java:创建大量新对象,java,performance,object,creation,Java,Performance,Object,Creation,我正在开发一个简单的GameOfLife程序,并尝试使用它进行一些优化。我的问题是,当我为6个原语的游戏小类创建单元格时,可能需要很长时间,特别是当我创建10000*10000这样的单元格时 所以我的问题是,是否有人知道如何更快地做到这一点 cells = new Cell[this.collums][this.rows]; for (int x = 0; x < cells.length; x++) { for (int y = 0; y < cells[0].lengt

我正在开发一个简单的GameOfLife程序,并尝试使用它进行一些优化。我的问题是,当我为6个原语的游戏小类创建单元格时,可能需要很长时间,特别是当我创建10000*10000这样的单元格时

所以我的问题是,是否有人知道如何更快地做到这一点

cells = new Cell[this.collums][this.rows];

for (int x = 0; x < cells.length; x++) {
    for (int y = 0; y < cells[0].length; y++) {
        cells[x][y] = new Cell(x * this.cellSize, y * this.cellSize, this.cellSize);
    }
}

创建大量这样的对象会很慢,有两种可能的解决方法:

使用布尔数组使用更多内存或位集使用更多CPU来存储值,因此不会产生对象开销 存储单元实例,但有1个活单元和1个死单元,然后仅使用这些实例填充数组
第一个更快,但第二个更面向对象。

如果你有大的或准无限的游戏场,你可能不应该首先将单个单元格建模为对象

生活游戏中的场通常不会填充太多,因此最好将其建模为稀疏矩阵。有大量的技巧可以优化游戏的生命实现——无论是从数据存储还是在下一步的性能方面。请勾选此问题,例如:


让单元格实例代表单个单元格看起来可能是个好主意,而且它可能适用于相对较小的字段。但是,如果你真的瞄准更大的领域,这将不会很好地工作。在这种情况下,您必须用OO来换取效率。

位集而不是布尔数组。我应该说@lexicore会更好instead@jrtapsell是的,那是真的,但价格是我不能使用额外的东西在细胞层。我想这可能是一个为什么要用复制或多重触发来做的原因。你可以做的很多事情,你只需要在计算下一代时将网格和偏移量传递给细胞,这样细胞就仍然可以有方法,而不仅仅是灵长类动物。对于你的游戏来说,10k乘10k是一个很可能的尺寸吗?Civ 5中最大的地图尺寸是128 x 80,所以我觉得你有一些想法要做。同时,请继续阅读。@MarsAtomic 10kx10x对于《生活游戏》来说并不算太多。这就是我对《生活游戏》的意思:谢谢你的回答,我会看一下: