如何计算java中执行的字节码数
我要参加麻省理工学院的战斗代码竞赛。参赛者编写程序来控制相互争斗的机器人。问题是你的机器人一次只能执行一定数量的字节码(去年是10000次)。现在,一个简单的循环 像如何计算java中执行的字节码数,java,jvm,bytecode,Java,Jvm,Bytecode,我要参加麻省理工学院的战斗代码竞赛。参赛者编写程序来控制相互争斗的机器人。问题是你的机器人一次只能执行一定数量的字节码(去年是10000次)。现在,一个简单的循环 像 (int i=0;i您可以像这样生成字节码: javac Employee.java javap -c Employee > Employee.bc 来源:您可以通过使用Hotspot JVM的调试版本(可以找到)并使用-XX:+CountBytecodes标志运行它来获得计数。仔细查看,他们使用asm字节码操纵器来进行计
(int i=0;i您可以像这样生成字节码:
javac Employee.java
javap -c Employee > Employee.bc
来源:您可以通过使用Hotspot JVM的调试版本(可以找到)并使用-XX:+CountBytecodes
标志运行它来获得计数。仔细查看,他们使用asm字节码操纵器来进行计数。如果我下载并在JavaC1.7.0\09编译的类文件上运行它,我会得到一个错误“不支持的major.minor版本51.0”。我应该使用其他编译器吗?我确实链接到了java 6 vm,所以这并不奇怪:)我不知道在线提供的java 7 vm的调试版本,因此您最好安装java 6编译器并重新编译。或者,您可以自己编译java 7 vm,但我认为这会更麻烦。您还必须指定-XX:-UseCompiler,否则代码将编译为本机代码,然后就不会被编译不计算在内。如果你是以执行的指令数量来衡量的,你可能会想手工编写字节码。Java编译器会盲目地将源代码翻译成字节码而不进行优化,这意味着它有大量的冗余指令。通常这不会是一个问题,因为VM会对它们进行优化,但我会这样做增加指令数。直接编写字节码可以做得更好。
javac Employee.java
javap -c Employee > Employee.bc