8

MITのバトルコードコンペティションに参加します。参加者は、互いに戦うロボットを制御するプログラムを作成します。問題は、ロボットが一定量のバイトコードを 1 ターンに実行することに制限されていることです (昨年は 1 ターンあたり 10000 でした)。さて、次のような単純なループ

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

彼らのソフトウェアによると、約 400 バイトコード (おそらく (i をインクリメントするための 2 バイトコード + i<100 かどうかをチェックするための 2 バイトコード) * 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 に答える