I decided to run Perft function with JProfiler.
Overall, Perft runs at about 3 million nodes/second on my machine, which is pretty slow, but i realize that Java is supposed to be slower than C++. For comparison, kz04px/libchess which is written in C++ runs at about 50 million nodes/second.
Here are some observations:
LinkedList.add and LinkedList.addLast together contribute to 30% of both CPU and memory allocation time. Perhaps LinkedList is not the best choice for storing legal moves and move history, due to the memory being allocated incrementally?
Long.valueOf takes about 10% of CPU and memory allocation time. Seems like there might be some extra conversion between java primitive and object wrapper.
MoveBackup and EnumMap take up about 10% or resources each. Perhaps, EnumMap has too much of a footprint for a structure which essentially only stores four boolean flags.
Board.doMove takes about 15% of resources. Here, i am not sure what can be improved, at the moment.
I might take a stab at these at some point. Below are JProfiler screenshots. Let me know is i am on a totally wrong track.
I decided to run Perft function with JProfiler. Overall, Perft runs at about 3 million nodes/second on my machine, which is pretty slow, but i realize that Java is supposed to be slower than C++. For comparison, kz04px/libchess which is written in C++ runs at about 50 million nodes/second. Here are some observations:
I might take a stab at these at some point. Below are JProfiler screenshots. Let me know is i am on a totally wrong track.