将代码提取到方法中时,java是否更快?(国际象棋引擎)

将代码提取到方法中时,java是否更快?(国际象棋引擎),java,performance,chess,Java,Performance,Chess,我一直在制作一个国际象棋引擎,我正在编写评估函数,这是其中的一部分: List<Double> eval; switch (name) { case "PAWN": eval = new ArrayList<>(pawnEval); if (color == -1) Collections.reverse(eval); evaluation += (PAWN + ev

我一直在制作一个国际象棋引擎,我正在编写评估函数,这是其中的一部分:

List<Double> eval;

switch (name) {
    case "PAWN":
        eval = new ArrayList<>(pawnEval);
        if (color == -1)
            Collections.reverse(eval);


        evaluation += (PAWN + eval.get(count)) * color;
        break;
    case "KNIGHT":
        eval = new ArrayList<>(knightEval);
        if (color == -1)
            Collections.reverse(eval);


        evaluation += (KNIGHT + eval.get(count)) * color;
        break;
    case "BISHOP":
        eval = new ArrayList<>(bishopEval);
        if (color == -1)
            Collections.reverse(eval);


        evaluation += (BISHOP + eval.get(count)) * color;
        break;
    case "ROOK":
        eval = new ArrayList<>(rookEval);
        if (color == -1)
            Collections.reverse(eval);


        evaluation += (ROOK + eval.get(count)) * color;
        break;
    case "QUEEN":
        eval = new ArrayList<>(queenEval);
        if (color == -1)
            Collections.reverse(eval);


        evaluation += (QUEEN + eval.get(count)) * color;
        break;
    case "KING":
        eval = new ArrayList<>(kingEval);
        if (color == -1)
            Collections.reverse(eval);


        evaluation += (KING + eval.get(count)) * color;
        break;
}

我的主要问题是:当将代码行提取到一个方法中而不是将其装配到一个方法中时,它真的会加速代码吗?

函数求值通常比内联代码花费更多的执行时间。 函数用于确保不会在数百个位置复制粘贴相同的逻辑。 考虑到如果必须对逻辑进行更改,那么在一个地方(函数)或在复制粘贴代码的数百个地方进行修改会更容易。
从VIEW的设计角度来看,我将使用一个函数

“将其放在评估函数中比直接放在评估函数中花费更多的时间”——这到底意味着什么?听起来你在说同样的话。典型的java初学者错误:java性能很少来自聪明的java源代码。它来自“外观正常”的源代码,然后在运行时由即时编译器进行大量优化。换句话说,你要努力编写简单、易于阅读和维护的代码。特别是对于一个复杂的东西,比如一个象棋引擎:假设能够理解你的代码在做什么是绝对的关键。首先让您的国际象棋引擎在功能上工作(当然:避免愚蠢的性能杀手),然后当它工作时,您对性能不满意,然后测量代码花费时间的地方,并开始修复。当然,另一个免责声明:测量java性能很难:最后:单独切换“字符串”这是一个糟糕的开端。您的第一步应该是定义一个合理的对象模型,并且您的棋子类型肯定应该基于枚举,而不是原始字符串!
evaluation += pieceEval(...) * color;
Before:
2876 total time (ms)
231786 nodes

After:
2184 total time (ms)
231786 nodes