Hello,
I was running a profiling with Java Mission Control on the game, and something struck my eye in the method profiling page:
CombatState.traverse() looked like a hot method that did not compile for some reason. Just to be sure, I ran a few more battles, but it still didn't compile.
Now, I have a good guess for what the cause could be. The Hotspot JVMs have a "huge method limit", basically anything above limit will never be compiled. The limit is 8000 bytes of bytecode instructions, and the CombatState.traverse() method is just above it with 8250 bytes, according to the classfile.
A fix would be straightforward, just refactor the method into smaller methods, and see what happens.