Date: Thu, 8 Jul 99 17:25:54 JST From: SHUDO Kazuyuki Subject: [JavaHouse-Brewers:26608] shuJIT 0.3.1 To: java-house-brewers at java-house.etl.go.jp (JavaHouse Brewers ML) Message-Id: <199907080823.RAA20571@cafe.muraoka.info.waseda.ac.jp> 首藤です。 Sun 社の JVM (JDK,JRE) / Linux,FreeBSD / x86 用の JIT コンパイラ、 shuJIT の 0.3.1 をリリースしました。 http://www.shudo.net/jit/index-j.html (日本語) http://www.shudo.net/jit/ (英語) 主な変更点は次の通りです。 - ELF バイナリ形式を採用している FreeBSD (3.X, 4.X) に対応。 - 零による除算を、シグナル (SIGFPE) で検出するようにした。 - 0x80000000 (== Integer.MIN_VALUE) / -1 で JVM が落ちる問題に対処。 x86 って、0x80000000 / -1 で割り込みが発生するんですね。 Linux や FreeBSD では、SIGFPE が発生します。 JDK 1.1.7v3a for Linux では、JVM が異常終了してしまいます。 JDK 1.2 pre-v2 は、きちんと JVM 仕様通りの動作をします。 ちなみに、この問題は、java-linux ML で Matt Welsh (*1) が指摘していました。 どうやってこんな発見しにくい問題に気付いたんだか… (*1) NinjaRMI を作った人。[JavaHouse-Brewers:26357] 参照。 99年 6/19 より来日中。 http://www.cs.berkeley.edu/~mdw/ これまでの shuJIT でも、NullPointerException はシグナル (SIGSEGV) を捕えて検出していましたが、今回、零による除算 もシグナル (SIGFPE) を捕えて検出するようにしました。 上述の 0x80000000 / -1 も、SIGFPE で検出しています。 上述の Matt が、Jaguar (*2) というプロジェクトで shuJIT を利用しています。 JIT コンパイラに手を入れて、生成するネイティブコードを 都合のいいように変えてやれ、というアイディアに基づいています。 同じようなアイディアに基づいて、私は分散オブジェクトシステムを作りました。 Java カンファレンスの何とか大賞 '98 に出品したときは JITDO (Just-In-Time Distributed Object) という名前だったのですが、 MetaVM と改名しました。いまだにドキュメントがないのですが、 ソースコードはすでに shuJIT のアーカイブに含まれています。 また、shuJIT のページに論文があります。 (*2) ハードウェア資源に、Java プログラムから直接 (JNI を使わずに) アクセスできるようにして、メモリコピーを減らし、 高性能通信 and I/O を実現しよう、というプロジェクト。 現在は Myrinet (*3) のネットワークカード上のメモリへの 直接アクセスが実現されている。 http://www.cs.berkeley.edu/~mdw/proj/jaguar/ (*3) 低遅延、高帯域通信が売りの通信方式およびハードウェア。 PCI, Sbus 用のネットワークカードや、スイッチが それぞれ数十万円で売られている。 http://www.myri.com/ SHUDO Kazuyuki/首藤一幸 私をたばねないで あらせいとうの花のように shudoh at muraoka.info.waseda.ac.jp