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

问题描述 投票:0回答:4

我们如何在没有 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 时该程序的性能?

java c# runtime jit
4个回答
5
投票

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

可以为许多 JVM 实现关闭 JIT,例如,

-Xint
用于 Sun JVM。


3
投票

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

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

GCJ(GNU Java 编译器)可以将 .class 文件编译为可执行对象,然后可以链接到 .exe 文件,甚至 C++ 文件。当然,最终的 exe/库将以 GC 和 Java 运行时(静态/动态链接的 .LIB)依赖项结束。


1
投票

Oracle JVM 接受

-Djava.compiler=NONE
来禁用 JIT(
-D
设置系统属性,
java.compiler
是属性名称
NONE
是值)。不知道 .Net (C#)。


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.