Date: Fri, 7 May 99 11:22:09 JST From: SHUDO Kazuyuki Subject: [JavaHouse-Brewers:25206] Re: How to treat handleEvent() To: java-house-brewers at java-house.etl.go.jp (JavaHouse Brewers ML) Message-Id: <199905070220.LAA31134@cafe.muraoka.info.waseda.ac.jp> JVM & クラスファイルを愛する :) 首藤です。 JVM 仕様の本の日本語版、Addison Wesley の方を持っていることを忘れて、 O'Reilly の方 (オーム社刊) も買ってしまいました。5000円強。 今買うなら間違いなく O'Reilly の方が楽しいです。 安島さん wrote: > ------------------- > > JITコンパイラを使用していると、スタックトレース > でソースファイルの行数が表示されない場合がありま > す。 スタックトレースで、ソースファイル中の行数が表示されるための条件が いくつかあります。 1. メソッドが JIT コンパイルされていないこと。 2. クラスファイルが、バイトコード命令 (のメソッド中のオフセット) と ソース中の行の対応表 (LineNumberTable attribute) を持っていること。 JIT コンパイラを使っても使わなくとも、クラスファイル中に、 ソース中の行に関する情報がなければ、バイトコード上のプロ グラムカウンタからソース上の行番号を算出することはできません。 その対応表、少なくとも JDK 1.1.7 (for Linux) では、 javac に -O オプションを付けると生成されません。 つまり、javac に -O を付けずに、実行時に JIT コンパイラを使わないではじめて、 スタックトレースで行番号が表示されます。 > ところで、HotSpot VM を使用していると、行数がちゃ > んと表示されるようなのですが、いろいろ試したわけ > ではないので、確かなことはわかりません。 > まだ、コンパイルされていないから? スタックトレースの時点で、 そのメソッドはインタプリタによって実行されていた、ということだと思います。 SHUDO Kazuyuki/首藤一幸 私をたばねないで あらせいとうの花のように shudoh at muraoka.info.waseda.ac.jp