如何计算java中执行的字节码数量
我要参加麻省理工学院的电竞比赛。 参赛者编写的程序可以控制相互对抗的机器人。 问题在于你的机器人只能在一个回合中执行一定数量的字节码(去年每回合10000次)。 现在,简单的循环就像
(int i=0; i<100; i++){ // do nothing }
根据他们的软件,使用大约400字节码(大概是这样的(用于递增i的2字节码加上用于检查i <100的2字节码)* 100 = 400字节码)因此我们必须编写非常紧密的代码。 因此,当我尝试一些不同的导航算法时,重要的是我能够弄清楚我的代码使用了多少字节码 – 我该怎么做?
(这是可能的 – 他们这样做,我只是不确定如何!而且,他们必须阻止JIT以某种方式进入游戏。我知道每个机器人都在一个单独的线程中运行,所以我肯定答案涉及某些我不知道的线程技巧。)
您可以使用Hotspot JVM的调试版本(可在此处找到)并使用-XX:+CountBytecodes
标志运行它来获取计数。
查看他们的源代码 ,他们使用asm字节码操纵器http://asm.ow2.org/进行计数。
您可以像这样生成字节码:
javac Employee.java javap -c Employee > Employee.bc
来源: http : //www.ibm.com/developerworks/ibm/library/it-haggar_bytecode/