Date: Sat, 17 Jul 99 19:01:08 JST From: SHUDO Kazuyuki Subject: [JavaHouse-Brewers:26780] Re: HotSpot 1.0.1 EA --- On Stack Replacement! & JDC99Tokyo Topic To: java-house-brewers at java-house.etl.go.jp (JavaHouse Brewers ML) Message-Id: <199907170958.SAA03261@cafe.muraoka.info.waseda.ac.jp> 首藤です。HotSpot に関して。 昨日 (99年 7/15(金))、東京工業大学で次の講演がありました。 Jim Waldo による、Jini に関する講演 タイトル: Object Oriented Programmig on the Network Lars bak による、HotSpot に関する講演 (タイトルは忘れました。) おそらく内容は Java Developer Conference 99 Tokyo での講演と同じです。 村田@沖電気.関西研さん wrote: > で、 HotSpot 1.0.1 Early Access 版 が公開されています。 > このバージョンのもっとも大きな特徴は、 > あるメソッド内(mainメソッドを含む)で、 > 1. ループがあり > 2. ループ内で他のメソッドを呼ばない > 場合でも、そこが何度もループすれば、 > HotSpot と認定して最適化処理がなされるようになったことです。 講演のスライドにこんなことが書いてありました。 - 各メソッドは呼び出しカウンタ (invocation counter) を持つ。 - 次の場合に呼び出しカウンタが増やされる。 - メソッド呼び出し。 - 後方へのジャンプ。 え、こんな単純なの?というのが第一印象です。 カウンタの値がある敷居値 (*1) を超えると JIT コンパイルが 起こるのでしょうね。後方 (プログラムカウンタの若い方向) へのジャンプでもカウンタが増やされるので、メソッド呼び出 しを含まないループも hot spot だとみなされ得る、と。 (*1) さて、この敷居値はどのように設定されるものでしょうか。 メソッドのコード長などの関数だったりするのでしょうか。 まだ研究の余地があるかも。 また、adaptive compilation と言うからには、 あるメソッドを inlining するかしないかの判定にも、 呼び出しカウンタを使っているような気がします。 > ちなみに、ここで用いられている手法が > On Stack Replacement メソッドがインタプリタによって実行されている最中に JIT コンパイルが決定され、行われた場合、メソッドの実行中であっ てもコンパイラが生成したネイティブコードの実行に切替えた いわけです。そこで、インタプリタ上の実行コンテクスト (*2) をネイティブコード上のそれに変換します。 Sun の人はこの変換を `on stack replacement' と呼ぶようです。 (*2) プログラムカウンタやスタック上の要素などなど。実行状態。 Lars Bak は `activations' と呼んでいた。 #これ、スレッド移送のために shuJIT 上で実装しようと思っていたのですが… #やはりというか何というか、すでにやられていたとわ。 > ・HotSpot のソースが 1999.8.1 に > Sun Community Source License(SCSL) の元で公開予定。 何にせよ、ソースコードの公開は楽しみです。 SHUDO Kazuyuki/首藤一幸 私をたばねないで あらせいとうの花のように shudoh at muraoka.info.waseda.ac.jp