如何在没有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时,如何比较此程序的性能?
即使使用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密集型任务(打开/关闭文件非常昂贵),代码是否编译会产生如此小的差异,您将难以衡量它。