【发布时间】:2012-12-10 23:28:14
【问题描述】:
我要参加麻省理工学院的战斗密码竞赛。参赛者编写程序来控制互相战斗的机器人。问题是你的机器人被限制在一个回合中执行一定数量的字节码(去年是每回合 10000 个字节码)。现在,一个简单的循环 喜欢
(int i=0; i<100; i++){
// do nothing
}
根据他们的软件,使用大约 400 个字节码(大概类似于 (用于递增 i 的 2 个字节码加上 2 个字节码 用于检查 i
(有可能——他们做到了,我只是不知道怎么做!而且,他们必须阻止 JIT 以某种方式发挥作用。我知道每个机器人都在单独的线程中运行,所以我当然 答案涉及某种我不知道的 Thread 诡计。)
【问题讨论】:
-
如果您以执行的指令数量来衡量,您可能希望手动编写字节码。 Java 编译器盲目地将你的源代码翻译成字节码,没有优化,这意味着它有大量的冗余指令。通常这不会成为问题,因为 VM 会优化它们,但它会增加你的指令数。直接写字节码可以做得更好。
-
这篇帖子e 给出了解决这个问题的工作代码sn-p