gpt4 book ai didi

java - 为什么声明一个数组使用如此多的 CPU,我该如何优化它?

转载 作者:搜寻专家 更新时间:2023-11-01 03:17:50 24 4
gpt4 key购买 nike

我正在编写一个国际象棋引擎作为一个学习项目。为了决定走什么棋,它需要分析从当前棋盘状态下走 4 步可以到达的所有棋盘状态。这意味着我必须分析数十万个电路板。

代码速度慢是可以理解的,所以我使用内置的 Netbeans 分析器来查看我应该优化哪个函数。我惊讶地发现,使用最多 CPU 的只是在复制的 Board 对象中创建新数组。

这是它所说的使用最多 CPU 的函数,特别是 init1():

private void initializeFields(Color active) {
init1();
init2(active);
init3();
init4();
}

private void init1() {
//this line appears to be using a ton of CPU
pieces = new Piece[SQUARES_PER_SIDE][SQUARES_PER_SIDE];
}

private void init2(Color active) {
activePlayer = active;
}

private void init3() {
moveHistory = new LinkedList<>();
}

private void init4() {
possibleMoves = null;
}

下面是分析器结果:

enter image description here

很明显,我知道正在创建和查看的大量板意味着 Board 类中的一些小东西可能会占用最多的 CPU。但是,我对此有 2 个问题:

<强>1。为什么数组声明占用了 Board 中最多的 CPU?

我期望对每个棋盘状态的值进行移动计算或分析,而不是简单地创建数组。有没有可能我读错了结果?

<强>2。在这种情况下,我该如何优化性能?

我了解如何优化算法,但不确定如何优化数组声明。我也不确定我可以使用什么数据结构来表示 8x8 板而不是二维数组。

最佳答案

  1. Why is declaration of an array taking the most CPU of anything withing Board?

因为这可能是您所做的几乎所有事情。在堆中搜索可用空间比其他任何事情都占用更多时间。

  1. How can I optimize my performance in this case?

只保留一个棋盘并进行每一步移动、测试并撤消每一步的移动。

如果您想要并行化,这是一种糟糕的方法,但它更快且更节省空间。 (好电话@shmosel)

关于java - 为什么声明一个数组使用如此多的 CPU,我该如何优化它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42153196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com