FLAGS

MENU

NOTICE

2009年6月28日日曜日

(プログラムネタ) JVMの最適化 (mixi05-u459989-200906281312)

ミクシ内で書かれた旧おかあつ日記を紹介します。
(プログラムネタ) JVMの最適化
2009年06月28日13:12
javaのassertは、C++などのコンパイラ言語にあるようなassertと違って、コンパイル時の指定によってクラスファイルから削除することができず、常にassert指令がコンパイル結果に残る。 つまり開発時専用のコードが本番時にも残ることになり、効率が悪いように感じる。

しかしそれは事実ではないらしい。 javaのクラスファイルは実行時JVMによってネイティブコードにコンパイルされるが、assertionをオフにして実行すると、この段階で assertion用のコードはばっさり削除されてコンパイルされるらしい。 つまりクラスファイルにassertionが残っていても実行効率が落ちることはない、ということらしい。

javaのクラスファイルコンパイラは最適化をほとんど度外視した非常にストレートな実装になっているけど、それはその後で処理を行うJVMが条件によってネイティブコードのコンパイル結果を最適化するようになっているかららしい。 JVMが 最適化するときのヒントを得るため、クラスファイルコンパイラはあまり情報を削除しないようになっているのだろう。

だから java には コンパイラ指令もないのだろう。 コンパイラ指令によって、特定のコードをインライン展開したり、削除したりしたくなるが、これらのコンパイルの最適化は、二回目のコンパイル=JVM によるネイティブへのコンパイル時にJVM によって自動的に行われる、というポリシーなのだろう。

javaは 二回コンパイルされる、ということは覚えておいて損はないと思う。

コメント一覧
 
出展 2009年06月28日13:12 『(プログラムネタ) JVMの最適化』

著者オカアツシについて


小学生の頃からプログラミングが趣味。都内でジャズギタリストからプログラマに転身。プログラマをやめて、ラオス国境周辺で語学武者修行。12年に渡る辺境での放浪生活から生還し、都内でジャズギタリストとしてリベンジ中 ─── そういう僕が気付いた『言語と音楽』の不思議な関係についてご紹介します。

特技は、即興演奏・作曲家・エッセイスト・言語研究者・コンピュータープログラマ・話せる言語・ラオ語・タイ語(東北イサーン方言)・中国語・英語/使えるシステム/PostgreSQL 15 / React.js / Node.js 等々




おかあつ日記メニューバーをリセット


©2022 オカアツシ ALL RIGHT RESERVED