Java:从新对象中创造大量资金

时间:2017-09-11 19:42:38

标签: 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].length; y++) {
        cells[x][y] = new Cell(x * this.cellSize, y * this.cellSize, this.cellSize);
    }
}

2 个答案:

答案 0 :(得分:1)

如果您要使用大型(或无限制)游戏领域,您可能不应该首先将单个单元格建模为对象。

“生命游戏”中的字段通常不会填充太多,因此最好将其建模为稀疏矩阵。有很多技巧可以优化游戏生命实现 - 无论是数据存储还是性能(在下一步中将字段复制)。请查看此问题,例如:

  

Sparse matrices / arrays in Java

Cell个实例代表单个单元格似乎是一个好主意,它可能适用于相对较小的字段。但如果你真的瞄准更大的领域,这将无法正常工作。在这种情况下,您必须交易OO以提高效率。

答案 1 :(得分:0)

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

  • 使用布尔数组(使用更多内存)或BitSet(使用更多CPU)来存储值,因此您没有对象开销
  • 存储Cell实例,但有1个实时和1个死单元,然后只使用这些实例填充数组

第一个更快,但第二个更像面向对象。