JITコンパイルとは? わかりやすく解説

Weblio 辞書 > 同じ種類の言葉 > 情報 > コンピュータ > コンパイル > JITコンパイルの意味・解説 

実行時コンパイラ

(JITコンパイル から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/12/27 01:13 UTC 版)

実行時コンパイラ(じっこうじコンパイラ、just-in-time compilerJITコンパイラ)とは、ソフトウェアの実行時にソースコードをコンパイルするコンパイラのこと。通常のコンパイラはコンパイルを実行前に事前に行い、これをJITと対比して事前コンパイラ (ahead-of-timeコンパイラ、AOTコンパイラ)と呼ぶ。

概要

ソフトウェアを構成するモジュール、クラス、関数などのある単位のコードがまさに実行されるその時に、コンパイルすることから「Just In Time」と名付けられた。動的コンパイルという用語は、実行時に機械語を生成するというより広い意味であり、JITコンパイルは動的コンパイルの一種である。

JIT方式の主な利点は、オペレーティングシステムCPUに依存しないソースコードや中間コードでソフトウェアを配布できる事である。これはその都度コードを解釈しながら実行する解釈実行方式でも可能であるが、JITではコンパイルを行いメモリ上に生成した機械語が実行されるため、実行速度を向上させることができる。

事前コンパイルと比べ、JITではコンパイル時間がプログラム実行時間のオーバーヘッドとなる。また、事前コンパイルで可能な高度で時間のかかる最適化を行えないといった欠点がある。

利点

上記以外にもJITコンパイルは実行環境を知った上でそれに応じた生成コードの選択や最適化が可能という利点もある。

一例として、インテルx86 CPUの場合、IA-32アーキテクチャの範囲内でCPU世代毎に命令が拡張されてきたが、アプリケーションの後方互換性を保持しようとすると、80386と互換の命令しか使うことができない。例えば、MMX PentiumMMX命令は80386やPentiumでは実行できない。JIT方式ではCPUがMMXをサポートしているならMMX命令を使ったコードを生成し、そうでなければ多少効率の悪いPentiumの命令範囲内で実行する、ということができる。

また、実行環境のキャッシュメモリのサイズ、速度特性などは実行時にならないとわからないが、JITコンパイルでは実行中のCPUやメモリの情報を知ることができる。このためそれに応じたコードを生成し、事前コンパイルよりも優れたコードを生成できる可能性がある。

さらに、オブジェクト指向言語では仮想メソッドの呼び出しは仮想関数表を経由した間接呼び出しになるが、動的コンパイルでは、そのメソッドをオーバーライド定義したサブクラスが存在しない限り、間接呼び出しを静的束縛として呼び出したり、インライン展開することができる(そのメソッドをオーバーライドするサブクラスが動的にロードされる可能性があるが、その場合はこのコンパイルされたメソッドは最適化戻し (deoptimize) される必要がある)。

適応的コンパイル (Adaptive Compilation)

上記のJITコンパイラの短所を補う一方式として適応的コンパイルがある。これは、起動当初はインタプリタとして実行し、繰り返し実行されるコードを検出(プロファイリング)、その部分のみをコンパイルするというものである。コードが使われた時にすぐにコンパイルするのではなく、何回か呼ばれた後に遅らせてコンパイルすることを遅延コンパイル (Lazy Compilation)と呼ぶ。

プログラム実行時間の大半はごく一部のコードに費やされるという経験則がある - 典型的に実行時間の80%は20%のコードに費やされる、80-20の法則。適応的コンパイルはこのようなコードのみをコンパイルすることで、起動時のオーバーヘッドや利用メモリ増大を抑えつつ、実行速度を向上することができる。この適応的最適化 (Adaptive Optimization) は、静的コンパイルでは得られない情報を元に最適化するため、むしろパフォーマンスが上がる場合もある。

数百件以内といった少量レコードを処理するバッチジョブが、一日に何百本、何千本も走る場合は注意が必要である。JITコンパイルを用いた場合、適応的コンパイルをしてさえも、ジョブの初めに共通的なクラスのコンパイル処理が何百回と行われる。処理件数が少ないので、クラス群の多くはコンパイル効果が出る前に、あるいはコンパイルさえされないうちにジョブが終わってしまう。その結果、ユーザロジックよりこうしたオーバヘッドにCPUなどの資源が消費されてしまう。処理件数によってJIT/AOTの有利不利が変わるが、使い分けるのは難しい。

また、(Javaについていえば)AOTコンパイラを通常適用しにくい[独自研究?]。これらの理由で、 性能面ではマイナスな場面でも一般的な[独自研究?]JITコンパイラを使用していることがある。長時間のバッチジョブおよびオンラインでは、JITコンパイラ、 特に適応的コンパイルが概してフィットしている[独自研究?]。適応的コンパイルの最適化のために、何回実行されたらコンパイルするといったパラメタが用意されているものもある[要出典]パラメタチューニングは万能ではないとしても重要である[独自研究?]

応用

JITはJavaの普及に伴い広範囲に使われるようになったが、JavaのHotSpot技術はSelf言語の動的コンパイル技術研究に基づいている。それに先立つ商用SmalltalkでもJITコンパイル技術は確立されていた。

Crusoeでx86コードからCrusoe VLIW命令への変換にも用いられる。適応的コンパイルはDEC社によるFX!32でも用いられていた。

.NETプラットフォームも当初からJITを前提に設計されている。

JavaのJITコンパイラ

Symantec社のsymjitおよびBorland社のJITコンパイラは初期の主要なJITコンパイラであった。

Sun MicrosystemsHotSpotコンパイラは本格的に適応的コンパイル方式を採用した。Hotspot以降はJITコンパイラ部分のインタフェースが規定されており、JITコンパイルエンジン部分を差し替えることが可能になった。

IBMのIBM JDK、BEAのJRockitはいずれも独自の適応的コンパイルを行う。後者は特にx86に特化して実行効率を高めている。

学術的分野では、首藤によるShuJITや、富士通研究所東京工業大学によるリフレクション機能を扱うOpenJITなどがある。

JavaScriptのJITコンパイラ

近年の主要なウェブブラウザJavaScriptのエンジンにJITコンパイラを搭載し、高速処理できるようになっている。

Internet Explorer 9、Mozilla Firefox 3.5、Google Chrome 1、Safari 4、Opera 10.50、Opera Mobile 10.1以降のウェブブラウザに搭載されている。NetFront Browser 4.1 には搭載されていない。

実行時に変数に代入された値の統計データから変数に型を割り振ることでJITコンパイルし、高速にJavaScriptを処理できるようになった[1]。Google ChromeのV8などでは、インタプリタを使わずに最初からJITコンパイルし、変数の型は実行時に随時割り振る。Firefox 3.5では事前に一度インタプリタで実行して、その情報から型を割り振りながらJITコンパイルするタイプがある。どちらのタイプであっても型が安定している場合は高速に実行できる。

関連項目

参照

  1. ^ an overview of TraceMonkey ✩ hacks.mozilla.org

外部リンク


JITコンパイル

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/09 17:05 UTC 版)

Java仮想マシン」の記事における「JITコンパイル」の解説

最初Java仮想マシン実装 (JDK 1.0) はインタプリタであったため、動作速度が他のアプリケーション比べて遅い場合があった。そのため、メソッド実行直前 (Just in Time) にバイトコードCPUネイティブコードコンパイルして実行する形式JITコンパイラ)を、ボーランドIBMなどがリリースしたサン・マイクロシステムズ実装JDK 1.1からJITコンパイラ搭載した加えてJDK 1.2から、サン・マイクロシステムズHotSpotという高速化技術導入したHotSpotJITコンパイラ一種だが、常にJITコンパイルを行うのではなく実行回数規定回数超えたメソッド (Hotspot) のみをJITコンパイルする。これにより、JITコンパイルによる無駄なリソース消費防いだり、インタプリタ実行時プロファイリング情報をJITコンパイル利用できる利点がある。HotSpotには用途別に、クライアントVMコンパイル高速だが生成されるネイティブコード相対的にあまり最適化されない)と、サーバVMコンパイル低速だが生成されるネイティブコード相対的により最適化される)がある。

※この「JITコンパイル」の解説は、「Java仮想マシン」の解説の一部です。
「JITコンパイル」を含む「Java仮想マシン」の記事については、「Java仮想マシン」の概要を参照ください。

ウィキペディア小見出し辞書の「JITコンパイル」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ

「JIT コンパイル」の例文・使い方・用例・文例

Weblio日本語例文用例辞書はプログラムで機械的に例文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。



JITコンパイルと同じ種類の言葉


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「JITコンパイル」の関連用語

JITコンパイルのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



JITコンパイルのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの実行時コンパイラ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのJava仮想マシン (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。
Tanaka Corpusのコンテンツは、特に明示されている場合を除いて、次のライセンスに従います:
 Creative Commons Attribution (CC-BY) 2.0 France.
この対訳データはCreative Commons Attribution 3.0 Unportedでライセンスされています。
浜島書店 Catch a Wave
Copyright © 1995-2025 Hamajima Shoten, Publishers. All rights reserved.
株式会社ベネッセコーポレーション株式会社ベネッセコーポレーション
Copyright © Benesse Holdings, Inc. All rights reserved.
研究社研究社
Copyright (c) 1995-2025 Kenkyusha Co., Ltd. All rights reserved.
日本語WordNet日本語WordNet
日本語ワードネット1.1版 (C) 情報通信研究機構, 2009-2010 License All rights reserved.
WordNet 3.0 Copyright 2006 by Princeton University. All rights reserved. License
日外アソシエーツ株式会社日外アソシエーツ株式会社
Copyright (C) 1994- Nichigai Associates, Inc., All rights reserved.
「斎藤和英大辞典」斎藤秀三郎著、日外アソシエーツ辞書編集部編
EDRDGEDRDG
This page uses the JMdict dictionary files. These files are the property of the Electronic Dictionary Research and Development Group, and are used in conformance with the Group's licence.

©2025 GRAS Group, Inc.RSS