[英]Why is declaring an array using so much CPU, and how can I optimize it?
我正在写一个国际象棋引擎作为学习项目。 要决定要做出什么样的举动,需要通过从当前的董事会状态进行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;
}
以下是分析器结果:
显然我明白,创建和查看大量的电路板意味着Board
类中的一些小东西可能占用最多的CPU。 但是,我有两个问题:
1.为什么是一个数组的声明采取的任何withing最CPU Board
?
我期待移动计算或分析每个板状态的值,而不仅仅是创建数组。 我有可能错误地阅读结果吗?
2.在这种情况下,如何优化我的表现?
我理解如何优化算法,但我不知道如何优化数组声明。 我也不确定我可以使用什么更好的数据结构来表示8x8板而不是2维阵列。
- 为什么声明一个数组占用最多CPU的CPU?
因为这可能几乎就是你所做的一切。 在堆中搜索可用空间占用的时间比其他任何东西都多。
- 在这种情况下,如何优化我的表现?
只保留一块板并进行每次移动,测试并撤消每一步的移动。
如果你想要并行化,这是一个糟糕的方法,但它更快,更节省空间。 (好的电话@shmosel)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.