2012-02-15 7 views
0

JITヘルプなしでJavaまたはC#プログラムを実行するにはどうすればよいですか?JITを使わないでプログラムを実行するには?

擬似コード:

for(int i=0; i<100; i++) 
{ 
    // open file in append mode 
    // remove last line 
    // add a line 
    // close the file 
    // if any exception occurs, continue with next iteration 
} 

どのようにJITを無効/有効になっているこのプログラムのパフォーマンスを比較するには?

+0

**モデレーターノート** *私の目覚ましで完全に壊れた会話を残さずに、信号よりもノイズが多いコメントを外科的に除去する方法はありませんでした。その後、この質問のコメントは削除されました。この質問について建設的な会話をしたいのであれば、チャットを利用してください。建設的で親切な質問やポイントがある場合は、ここに投稿してください。 * –

答えて

4

Mono(バイトコードインタープリタはこれ以上サポートされていません)でも、JITなしで.NETコードを実行することはできません。

多くのJVM実装でJITをオフにすることができます(たとえば、Sun JVMの場合は-Xint)。

1

Oracle JVMは、-Djava.compiler=NONEを受け入れ、JITを無効にします(-Dは、システムプロパティーを設定します。java.compiler is the property nameNONEは値)。 .Net(C#)については考えられません。

3

.Netでは、中間言語をターゲットマシン固有のコードに先立ってコンパイルするだけで、jitなしでプログラムを実行できます。 NGenは、.netのためにこれを行うツールです。

this postによると、あなたは、Javaのための類似した何かをGCJを使用することができます。

GCJ(GNU Javaコンパイラ)は、その後、.exeファイルにリンクすることができ、実行可能オブジェクトに.classファイルをコンパイルすることができますまたはC++ファイルであってもよい。もちろん、最終的なexe /ライブラリはGC & Javaランタイム(静的/動的にリンクされた.LIB)依存関係に終わるでしょう。

+0

@Azodiousは正しいことを理解していれば、CILをマシン固有のコードにコンパイルするのではなく、ネイティブにコンパイルされたコードを実行するのではなく、.NET仮想マシンでCILを実行したいと考えています。あなたのメッセージは全く別のものです** **マシン固有のコードコンパイル(NGenで事前に作成されたもの、またはJITコンパイラで最初に実行されたもの)にはCILがあります。 – penartur

+0

2番目の読み方ではおそらくあなたは正しいでしょう...その場合、.netの答えはあなたができないということです:) –

+0

デバッガの下でコードを開始すると、jitが非アクティブになりますか?実行中のプロセスにデバッガを接続するのと比較して、生成されたコードはデバッガで起動するときにかなり大きな違いがあります。 – Voo

1

コードが最初に実行されるとき、それは解釈されます。それが何度も実行された後で(通常は10,000)、コンパイルされます。 CPU集約的なタスクの場合、これは大きな違いをもたらす可能性があります。しかし、IO集中型タスクでは、OSとハードウェアがはるかに大きな違いがあります。

ループが100であるため、コンパイラを有効にするかどうかに関係なく、ネイティブコードにコンパイルされないことが保証されます。 IO集約的なタスク(そしてファイルのオープン/クローズは非常にコストがかかります)では、コードがコンパイルされているかどうかにかかわらず、このような小さな違いがあります。

関連する問題