(プログラムネタ) JVMの最適化
2009年06月28日13:12
javaのassertは、C++などのコンパイラ言語にあるようなassertと違って、コンパイル時の指定によってクラスファイルから削除することができず、常にassert指令がコンパイル結果に残る。 つまり開発時専用のコードが本番時にも残ることになり、効率が悪いように感じる。
しかしそれは事実ではないらしい。 javaのクラスファイルは実行時JVMによってネイティブコードにコンパイルされるが、assertionをオフにして実行すると、この段階で assertion用のコードはばっさり削除されてコンパイルされるらしい。 つまりクラスファイルにassertionが残っていても実行効率が落ちることはない、ということらしい。
しかしそれは事実ではないらしい。 javaのクラスファイルは実行時JVMによってネイティブコードにコンパイルされるが、assertionをオフにして実行すると、この段階で assertion用のコードはばっさり削除されてコンパイルされるらしい。 つまりクラスファイルにassertionが残っていても実行効率が落ちることはない、ということらしい。