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

本文关键字:情况下 运行 程序 JIT | 更新日期: 2023-09-27 18:24:33

在没有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时,如何比较此程序的性能?

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

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

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

在.Net中,只需先将中间语言预编译为目标机器特定的代码,就可以在没有jit的情况下运行程序。NGen是一个为.net.做这件事的工具

根据这篇文章,你可以使用GCJ为java:做一些类似的事情

GCJ(GNUJava编译器)可以将.class文件编译成可执行对象,然后这些可执行对象可以链接到.exe文件,甚至C++文件中。当然,最终的exe/库将以GC&Java运行时(静态/动态链接.LIB)依赖关系。

Oracle JVM接受-Djava.compiler=NONE以禁用JIT(-D设置系统属性,java.compiler为属性名称,NONE为值)。对.Net(C#)一无所知。

当代码第一次运行时,它会被解释。只有在它运行了多次(通常为10000次)之后,它才会被编译。对于CPU密集型任务,这可能会产生很大的影响。然而,对于IO密集型任务,操作系统和硬件会产生更大的差异。

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