8

我要参加麻省理工学院的战斗密码竞赛。参赛者编写程序来控制互相战斗的机器人。问题是你的机器人被限制在一个回合中执行一定数量的字节码(去年是每回合 10000 个字节码)。现在,一个简单的循环

(int i=0; i<100; i++){
// do nothing
}

根据他们的软件,使用大约 400 个字节码(大概类似于(2 个字节码用于增加 i 加上 2 个字节码用于检查 i<100)* 100 = 400 个字节码)所以我们必须编写非常紧凑的代码。因此,当我尝试一些不同的导航算法时,重要的是我能够弄清楚我的代码使用了多少字节码——我该怎么做?

(有可能——他们做到了,我只是不知道怎么做!另外,他们必须阻止 JIT 以某种方式发挥作用。我知道每个机器人都在单独的线程中运行,所以我确定答案涉及某种我不知道的线程诡计。)

4

3 回答 3

6

您可以通过使用 Hotspot JVM 的调试版本(可以在此处找到)并使用-XX:+CountBytecodes标志运行它来获得计数。

于 2012-12-11T00:34:25.937 回答
2

查看他们的源代码,他们使用 asm 字节码操纵器http://asm.ow2.org/进行计数。

于 2012-12-11T01:20:59.193 回答
0

您可以像这样生成字节码:

javac Employee.java
javap -c Employee > Employee.bc

来源:http ://www.ibm.com/developerworks/ibm/library/it-haggar_bytecode/

于 2012-12-10T23:37:01.573 回答