shuJIT
- Java Just-in-Time Compiler for x86 processors
last-modified: May 30, 2017
[Japanese] [English]
http://www.shudo.net/jit/index-j.html
x86 プロセッサおよび Sun の Classic VM (JDK, Java 2 SE, JRE) 用の
JavaTM Just-in-Time コンパイラです。
FreeBSD と Linux、NetBSD で動作します。
What's New
- 2017/5/30
- 0.8.1 をリリースしました。
- 文字エンコーディングを UTF-8 に変更した。
- ソースコードを GitHub に載せた。
- 2005/8/8
- 0.8.0 をリリースしました。
- GCC 4.0.1 でコンパイルできるようにした。
- Win32, Xbox 対応コードを採り入れた。動作未確認。
- 詳しくは ChangeLogファイルをご覧下さい。
- 2003/4/9
- shuJIT を参照している論文一覧を、このページに追加しました。
- 2003/1/20
- 0.7.14 をリリースしました。
- GCC 3.2 で問題なくコンパイルできるようにした。
- java.lang.Math クラスの abs メソッドを既定の機械語列に置き換えて高速化した。Java 2 では exp, asin, acos に対しても同じ高速化を適用する。
(sqrt, sin などに対しては、0.3.8 からこの高速化を適用していた。)
- JDK 1.1.X で null に対してコンストラクタ呼び出された場合に異常終了してしまう問題に対応。bytecode verifier が検出してくれないため、null check の省略を止めた。
- 2002/7/17
- 0.7.13 をリリースしました。
- Orion 1.5.4 のバグに対する回避策を実装した。compiler.h にてマクロ SLACK_ACCESS_CONTROL を #define することで有効にできる。
- 1999/8/21
- 0.3.7 をリリースしました。
- 1998/9/20
- このページを用意し、最初の版をリリースしました。
FreeBSD
次の組合せで動作を確認しています。
- JDK 1.3.1 patchlevel 8, GCC 2.95.4 and FreeBSD 4.8-PRERELEASE
- JDK 1.1.8 (ELF, V1999-11-9), GCC 2.95.4 and FreeBSD 4.8-PRERELASE
Linux
次の組合せで動作を確認しています。
- Blackdown JDK 1.3.1_02b, GCC 3.1 20020314, glibc 2.2.5, Linux 2.4.21-pre3
- Blackdown JDK 1.2.2, GCC 3.1 20020314, glibc 2.2.5 and Linux 2.4.21-pre3
- JDK 1.1.8v3, GCC 3.1 20020314, glibc 2.2.5 and Linux 2.4.21-pre3
- JDK 1.1.7v1a, egcs 1.1.2, libc 5.4.38 and Linux 2.0.35
shuJIT は GNU LGPL の各条項に従って頒布されます。
ChangeLog を眺めるのも面白いかもしれません。
コンパイル済みのバイナリも提供しています。
- 「Java Just-in-Time コンパイラのためのコスト効率の良いコンパイル手法」
電子情報通信学会論文誌, Vol.J86-DI, No.4, pp.217-231, 2003年 4月
shuJIT について現時点で最も詳しく書いてある文書です。
- 「Lazy Compilation」
shuJIT を使って lazy compilation の効果を計測した結果です。
- 「プログラマに単一仮想マシンビューを提供する分散オブジェクトシステムの実現」
情報処理学会論文誌, Vol.40, No.SIG07 (PRO 4), pp.66-79, 1999年 4月
分散仮想マシン MetaVM の論文ですが、shuJIT に関する記述もあります。
- 「x86用Just In Time コンパイラ shuJIT とJITコンパイラによるJava仮想マシンの分散オブジェクト対応 JITDO」
Javaほげほげ大賞'98 技術部門への応募作品です。
- 「strictfpの実装」
Javaもけもけ大賞'99 技術部門への応募作品です。
このページ (英語) に、
JIT コンパイラの性能を比較した結果を用意しています。
評価には、SPEC JVM98, SciMark 2.0, Linpack benchmark, エラトステネスのふるいを
用いています。
以下を計画しています。
- バイトコードの解釈を変える実験
- JITコンパイラはバイトコードをいかようにもコンパイルできます。
- つまり、JVMによるバイトコードの解釈はJITがコンパイラが決めています。
- このアイディアに基づき、分散仮想マシンMetaVM (旧名 JITDO) を実装しました。
- ソースコードが shuJIT のアーカイブに含まれています。ただし文書がありません。
- Myrinetでの低遅延通信を実現する土台として
shuJIT をハックした方もいます。
- さらなるアイディア募集中。
- 高速化
- 配列の boundary check 処理の軽減。alignment を意識する。など。
- MOBA 対応
- スレッド移送システムと共に動く JIT コンパイラにします。
- MMX, 3D Now!, SSE, SSE2 対応
- 嘘です。
興味深いリソース
- OpenJIT
- JIT コンパイラの挙動を Java のコードでカスタマイズできるようにしようという、
- 東工大の松岡研、富士通(研)で JIT コンパイラに関わっている方々のプロジェクト。
- Jaguar
- ハードウェア資源、例えばネットワークカード上のメモリに、Javaプログラムから
- JNIを使わずに直接アクセスさせることでデータのメモリコピーを減らし、
- 高性能通信およびI/Oを実現しようという研究、システム。
- JIT が生成するコードの変更を、shuJIT を元に実現していた。
- Matt Welshのプロジェクト。
- Java VM Implementations
- 風間さんがメンテナンスしている Java Programming Information の一部。
- Java 仮想マシンに関するリンクが集められている。
処理系
- ORP: Open Runtime Platform (http://intel.com/research/mrl/orp/)
- Intel の Microprosessor Research Labs で開発された x86 用の Java 実行系。
- 2種類の JIT コンパイラ (O3, O1) を持つ。
- 将来は、IA-64 向けのコードも公開される予定。
- TYA (http://sax.sax.de/~adlibit/)
- Sun の JVM および Linux, FreeBSD / x86 用の JIT コンパイラ。ソースが公開されている。
- JBuilder JIT for Linux
- Inprise社 が開発した、JDK 1.2/Linux/x86 用の JIT コンパイラ。
- この JIT コンパイラは Sun/Inprise JDK 1.2.X に含まれている。
- ElectricalFire
- 開発当初から高性能が目標の JVM。インタプリタを持たない。
- Kaffe
- 0 から作成された PersonalJava 1.1 互換の Java 実行系。
- ソースが公開されていて、JIT コンパイラを含んでいて、
- 数多くの OS、プロセッサに対応している。
- Japhar
- Java 実行系。インタプリタのみ。
- BulletTrainTM
- NaturalBridge LLC 社 が開発したスタティックコンパイラ (Ahead-of-Time コンパイラ)。
- Javaバイトコードをネイティブコードに変換する。Win32 用。売り物 ($999)。
- strictfpのセマンティクスをサポートしている。
- Java-Linux
- Linux 上の Java 関連情報。
- FreeBSD Java Project
- FreeBSD 用 JDK。
参考文献
- The JIT Compiler Interface Specification
- Sun の Classic VM 用に JIT を作成する際の C 言語 API。
- Sun はもうこの API をサポートしない。
- 通常の場合は JNI (Java Native Interface) で事足りるものの、JIT コンパイラを作ろうとした場合、今だに、Sun がサポートしていないこのインタフェースに依る必要がある。
- Java 仮想マシン仕様 第2版 (原題: The Java Virtual Machine Specification)
(Tim Lindholm, Frank Yellin, 村上雅章訳)
- Java 仮想マシンの仕様書。
- 4000円。ISBN4-89471-356-X。
- C Magazine 誌 1996年 5月号 pp.56,57「コラム1 nativeメソッドのインタフェイス」
- 数少ない、JNI より前のネイティブメソッドインタフェース(NMI)の解説。
- 80386プログラミング (John H. Crawford, Patrick P. Gelsinger, 岩谷宏訳)
- 3500円。ISBN4-8759-128-X。
- MMXテクノロジ最適化テクニック (小鷲英一)
- 数少ない、x86 アセンブラに関する日本語の本。
- 3500円。ISBN4-7561-0797-4。
shuJIT を refer している論文
- Michal Cierniak, Marsha Eng, Neal Glew, Brian T. Lewis, James M. Stichnoth:
"The Open Runtime Platform: A Flexible High-Performance Managed Runtime Environment",
Proc. of Joint ACM Java Grande - ISCOPE 2002 Conference (JGI2002), pp.156-164,
November 2002
- Matthias Jacob, Keith Randell:
"Cross-Architectural Performance Portability of a Java Virtual Machine Implementation",
Proc. of 2nd Java Virtual Machine Research and Technology Symposium (JVM'02), pp.79-89,
August 2002
- Dachuan Yu, Zhong Shao, Valery Trifonov:
"Supporting Binary Compatibility with Static Compilation",
Proc. of 2nd Java Virtual Machine Research and Technology Symposium (JVM'02), pp.165-180,
August 2002
- Matt Newsome, Des Watson:
"Proxy compilation of dynamically loaded Java classes with MoJo",
Proc. of the joint conference on Languages, compilers and tools for embedded systems (LCTES'02): software and compilers for embedded systems (Scopes'02)",
pp.204-212,
June 2002
- Vikram Chhabra, Akshay Kothare, Mark Claypool:
"The Effects of Locality, Content and Runtime on the Performance of Video in Java",
Proc. of the IASTED Conference on Applied Informatics",
Innsbruck, Austria, February 2002
- Matt Welsh, David Culler:
"Jaguar:
Enabling Efficient Communication and I/O in Java",
Concurrency: Practice and Experience,
Vol.12, pp.519-538, Special Issue on Java for High-Performance Applications,
December 1999.
Back to
Copyright (C) 1998,1999,2000,2001,2002,2003,2004,2005,2017 首藤 一幸
<shudo at computer.org>