Как запустить программу без JIT? - PullRequest
0 голосов
/ 15 февраля 2012

Как мы можем запустить программу на 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 включен / отключен?

Ответы [ 4 ]

5 голосов
/ 15 февраля 2012

Невозможно запустить код .NET без JIT, даже с Mono (его интерпретатор байт-кода больше не поддерживается).

Можно отключить JIT для многих реализаций JVM, например, -Xint для Sun JVM.

3 голосов
/ 15 февраля 2012

В .Net вы можете запускать программу без jit, только предварительно скомпилировав промежуточный язык для кода конкретной машины. NGen - это инструмент, который делает это для .net.

Согласно этой записи вы можете использовать GCJ для создания чего-то подобного для Java:

GCJ (компилятор GNU Java) может компилировать файлы .class в исполняемые объекты, которые затем могут быть связаны в файл .exe или даже файлы C ++.Конечно, конечный exe / библиотека будет зависеть от зависимостей среды выполнения GC и Java (статически / динамически связанных .LIB).

1 голос
/ 15 февраля 2012

Когда код запускается впервые, он интерпретируется. Только после многократного запуска (обычно 10 000) он компилируется. Для задач с интенсивным использованием процессора это может иметь большое значение. Тем не менее, для задач с интенсивным вводом-выводом ОС и имеющееся у вас оборудование имеют гораздо большее значение.

Таким образом, для цикла только из 100 вы можете быть уверены, что он не будет скомпилирован в собственный код, независимо от того, включен ли компилятор или нет. Для задачи с интенсивным вводом-выводом (а открытие / закрытие файла очень дорого), если код компилируется или нет, имеет такое небольшое различие, у вас будут проблемы с его измерением.

1 голос
/ 15 февраля 2012

Oracle JVM принимает -Djava.compiler=NONE для отключения JIT (-D устанавливает системное свойство, java.compiler - это имя свойства , NONE - это значение). Понятия не имею .Net (C #).

...