- PR -

.NETで作られたアプリの起動のオーバーヘッドってどうなんでしょうか?

投稿者投稿内容
乳牛
常連さん
会議室デビュー日: 2003/04/15
投稿数: 22
投稿日時: 2008-03-24 20:28
みなさま色々とありがとうございます。

いまさらになってですみませんが、今回の質問の意図なんですが、質問を通して以下のようなことを学びたいと思っていました。
 ・JVMとCLRのちがい
 ・特にプロセスの起動のところの仕組み
 ・JVMとCLRどっちが早いとかいうのはケースバイケースで水掛け論になるのでそこは置いておく(こういう仕組みだからこういう局面でCLRは有利などの情報は歓迎)

問題解決がゴールではないのでなんか締りの無い議論に付き合わせてしまって申し訳ありませんが、皆さんに色々情報をいただけて感謝しております。

JVMと.NETアプリの場合のローディングの仕組みの差異はなんとなく理解できたつもりです。ユーザー作成のMyAppを起動する場合には、

JVMの場合・・・JVMの起動ありきでパラメタとしてMyApp.jarがロードされる
 1.java.exeがロードされ、起動される
 2.java中間コードをJVMがロードして解釈しながら実行

CLRの場合・・・CLRはMyApp.exeから呼ばれてロードされる
 1.MyApp.exeがロードされる
   そのときにCLRがらみの必要なDLLもロードされる
 2.MSILをCLRがロードして解釈しながら実行

こんな感じなのですね。似て非なるものというのがちょっと理解できました。

.NETのexeファイルはMSIL+CLRとやり取りをするバイトコードという構成なのかな、とイメージしました。(間違っていたらツッコんでいただければ・・・)

#こあらさんに紹介いただいたページは大変に理解の助けになりました。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2008-03-24 23:24
引用:

似て非なるものというのがちょっと理解できました。



受け取り方次第でしょうけど、根本的な原理はそれほど大きく違いません。

引用:

.NETのexeファイルはMSIL+CLRとやり取りをするバイトコードという構成なのかな、とイメージしました。



違いますね。位置づけとしては MSIL≒Java バイトコードです。

なので、.NET における .exe は

・JVM 起動、JVM に対する .jar の読み込み&実行を指示するためのネイティブコード
・アプリケーション固有のバイトコード(=.NET の場合は MSIL)

を含むことになります。


[ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2008-03-25 00:15 ]
乳牛
常連さん
会議室デビュー日: 2003/04/15
投稿数: 22
投稿日時: 2008-03-25 12:08
ありがとうございます。

私の書き方が間違ってましたね。。。
引用:

.NETのexeファイルはMSIL+CLRとやり取りをするバイトコードという構成なのかな、とイメージしました。



この部分ですが「CLRとやり取りをするバイトコード」→「CLRとやり取りするネイティブコード」でした。

引用:

違いますね。位置づけとしては MSIL≒Java バイトコードです。
なので、.NET における .exe は
・JVM 起動、JVM に対する .jar の読み込み&実行を指示するためのネイティブコード
・アプリケーション固有のバイトコード(=.NET の場合は MSIL)
を含むことになります。



はい、大体そんなイメージをしていました。

スキルアップ/キャリアアップ(JOB@IT)