如何在没有JIT的情况下运行程序?

时间:2012-02-15 09:16:02

标签: c# java compiler-construction runtime jit

如果没有JIT帮助我们如何运行Java或C#程序?

伪代码:

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时比较该程序的性能?

4 个答案:

答案 0 :(得分:5)

即使使用Mono也不可能在没有JIT的情况下运行.NET代码(不再支持其字节码解释器)。

可以为许多JVM实现关闭JIT,例如,对于Sun JVM,-Xint

答案 1 :(得分:3)

在.Net中,只有先将中间语言编译为目标机器特定代码,才能运行没有jit的程序。 NGen是为.net执行此操作的工具。

根据this post,你可以使用GCJ为java做类似的事情:

  GCJ(GNU Java编译器)可以将.cl​​ass文件编译成可执行对象,然后可以将它们链接到.exe文件,甚至是C ++文件。当然,最终的exe /库最终将使用GC&amp; Java运行时(静态/动态链接.LIB)依赖项。

答案 2 :(得分:1)

Oracle JVM接受-Djava.compiler=NONE以禁用JIT(-D设置系统属性,java.compiler is the property nameNONE是值)。不知道.Net(C#)。

答案 3 :(得分:1)

首次运行代码时,会对其进行解释。只有在它运行多次(通常是10,000次)后才能编译。对于CPU密集型任务,这可能会产生很大的不同。但是,对于IO密集型任务,操作系统和硬件会产生更大的差异。

因此,对于只有100的循环,无论是否启用编译器,都可以确保它不会被编译为本机代码。对于IO密集型任务(以及打开/关闭文件非常昂贵),无论代码是否编译都会产生如此小的差异,您将无法测量它。

相关问题