コードが不明確または不適切に記述されているために、Javaコンパイラのどの最適化が通常ブロックされる(または検出されない)可能性があるのか、コンパイラのコードをわかりにくくするためにどのような一般的な間違いが行われるのか疑問に思います。
3 に答える
Please understand that modern runtime environments (the actual Java command) is not executing the java bytecodes naively one by one, but is doing very heavy processing to compile to actual machine code.
This means that there is no special reason to make the bytecode particularly smart or optimized, as the JRE gives the same results anyway. For mobile Java devices, where the interpreter is less smart, and memory constraints are present, the ProGuard system allows for quite a bit of optimizing transformations. You might find these interesting.
通常、JIT コンパイラは、一般的なコーディング パターンとユース ケースに合わせて最適化されています。最善の策は、一般的な慣習、パターン、イディオムに従うことです。「コンパイラ用にコードを最適化」しようとすると、実際には最適化が難しいコードになる可能性があります。
コードを明確で表現力豊かにするようにして、コンパイラにその仕事を任せることをお勧めします。
...コーディング時にもう少し注意を払うことで回避できる非常に一般的な間違いがあるかどうかを知りたかった.
Sun の HotSpot JVM の場合、一般的な意味で犯しうる唯一の間違いは、コードが高速になると信じて (おそらく) トリッキーな方法で物事を実行しようとすることです。シンプルなコードを書くのがベストです。HotSpot チームの先輩からのこのアドバイスを見たことがあります。
ベスト プラクティスは、最適化を JIT コンパイラに任せ、プロファイラーが問題を指摘した場合にのみマイクロ最適化を試みることです。
(フロー制御に例外を使用したり、ループ内で文字列連結を行ったり、独自のメモリ管理を試みたりするなど、避けるべきことはよく知られています。しかし、これらはおそらくあなたが興味を持っているよりも高いレベルです。)