Javaは全面的に最適化を行い、ケースの数、スイッチが疎か密か、およびコードがJITがそのコードを最適化するのに十分なほどホットであるかどうかに応じて、スイッチを最適化できることを理解しています。コードが実際に非常にホットであると仮定して、ビットごとの使用やテスト対象の変数に対する「アシスト」をさらに提供する必要があるか、変数を「より適切な」数値にビットごとにシフトする必要があるかどうか疑問に思っています。「より良い」は、0xFFXX ではなく 0xXX です。何が必要かを具体的に述べたホットスポット JIT ドキュメントはありますか? 「xxx の一般的なプログラミング ガイドラインに従ってください」ではなく。
3 に答える
2
tableswitch
またはの決定は、コンパイラlookupswitch
によって既に行われています。JIT が aをjavac
に変換しようとしているとは聞いたことがありません。lookupswitch
tableswitch
したがって、最初のステップは、どのバイトコードが をjavac
翻訳したかを確認することswitch
です。
于 2011-10-01T14:30:22.100 に答える
1
これに対する簡単な答えはありません。
私はこの質問を hotspot-dev に持っていきます - 彼らはこれがどのように起こるかについてより多くの情報を提供できるかもしれません.
これについて興味深い見解を持っている可能性のある他の人々は、jvm-l メーリング リスト (Charlie Nutter、Remi Forax、John Rose など) にたむろしています。
于 2011-09-30T14:22:46.660 に答える
0
Java 自体は仮想マシン上で実行されるため、ここで何かが欠けていない限り、これを行う簡単な方法はないと思います。
したがって、Java を使用すると、ある種のブラック ボックスが得られます。さらに最適化するのは危険です。
Hotspot JIT ホワイトペーパーについては、こちらを参照してください。
于 2011-09-29T02:15:05.587 に答える