- - PR -
.NETはインタプリタじゃない?
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2002-03-20 13:33
引用:
----------------------------------------------------------------------- >> 初めての実行時にJITでネイティブコードを生成させ、 > これは初耳です。どこかにリファレンスがありますか? ----------------------------------------------------------------------- .NET Framework SDKの日本語版のドキュメントにありますね。 .NET Framework SDK .NET Framework の内容 共通言語ランタイム マネージ実行プロセス MSIL からネイティブ コードへのコンパイル ここに実行時のコンパイルについての詳しい話がでています。 一部抜粋すると、 --------- メソッドが初めて呼び出されると、スタブは JIT コンパイラに制御を渡し、 JIT コンパイラがそのメソッドの MSIL をネイティブ コードに変換し、 そのネイティブ コードを直接実行するようにスタブを変更します。 それ以降は、この JIT コンパイル済みのメソッドを呼び出すと生成済みの ネイティブ コードが直接実行され、JIT コンパイルとコードの実行に 必要な時間を節約できます。 --------- となるようです。 | ||||
|
投稿日時: 2002-03-20 14:47
いや、それって、
のことですよね?あ、それとも最初からそのことだったのかな?私の勘違いでしたか。 アプリが始めて実行されるときに、ngenと同じことをしてくれる機能があるっていう意味だと思ってました。 [ メッセージ編集済み 編集者: NothingBut.NETFX 編集日時 2002-03-20 14:49 ] | ||||
|
投稿日時: 2002-03-20 18:00
私も余り詳しくは無いのですが、問題になっているのは、pre-JITの事だと思います。
pre-JITでは、インストール時にネイティブコードへのコンパイルが行われます。そしてそのコンパイルされたネイティブコードは、永続的な外部ファイルとして保存されます。pre-JITはアセンブリ単位でコンパイルされるようです。従って実行時にはネイティブが直接ロードされますから、より高速になるのではないでしょうか? | ||||
|
投稿日時: 2002-03-20 19:21
>問題になっているのは、pre-JITの事だと思います。
そう、それはngenという名前のツールのことです。 | ||||
|
投稿日時: 2002-03-20 20:05
>そう、それはngenという名前のツールのことです。
pre-JIT はコンパイルの方法だと思います。 ngenが行うかどうかとはまた別の事ではないでしょうか? 実行時にメソッド単位でコンパイルする方法と、インストール時にアセンプリ単位でコンパイルする方法があるという事が大事なんだと思います。 実際、pre-JITはstandart-JITが行うという説明を見た事がありますから。 私は、そう思うんですけど・・・。 | ||||
|
投稿日時: 2002-03-20 22:02
で、その話はもうふうすけさんが詳しく解説されていますけど? 私が聞きたかったのは、ふうすけさんの解説の中で、そのpre-JITとは別に、アセンブリの実行時にすべてをJITコンパイルするオプションが存在するかのように読めたので、それはどこかにリファレンスがあるのか、ということです。で、どうやらそれは私の勘違いだったようなので、もう解決したと思ってますけど。 | ||||
|
投稿日時: 2002-03-22 10:42
うわ、ちょっと目を離してたら…こんなに話が進んでる
要点はPreJIT(ngen)以外にJIT結果をキャッシュするかって事だと思うのですが、出展がさだかではありません確認不足でした、申し訳ない。 今現在、私が持っている図ではJIT結果をキャッシュするのは ngenだけです、通常のJITで実行した場合のネイティブコードはキャッシュされるわけではありません。その点については間違いだったと思います。 | ||||
|
投稿日時: 2002-03-30 21:07
>pre-JITでは、...従って実行時にはネイティブが直接ロードされますから、より高速になるのではないでしょうか?
pre-JITではJITコードより実行は遅いです。JITコードより有利なのは、初期ロード時間が小さくなるのとworking setが小さくなることです。 >JavaのHotspotコンパイラは、コードを解析して、よく使われるメソッドをコンパイルして実行することで、コンパイル時間(これはJITterでは実行時間に含まれてしまう)の短縮と、コンパイルによる実行速度の改善との両立を目指しているようです。 これは、profile-guided optimizationといいます。将来の.NETでも対応予定です。 |