2012-02-15 3 views
0

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

+0

** Заметка модератора ** * Невозможно было бы хирургически удалить комментарии, которые были более шумными, чем сигнал, не оставляя полностью сломанной беседы на моем пути. Впоследствии замечания по этому вопросу были устранены. Если вы хотите провести конструктивный разговор по этому вопросу, используйте чат. Если у вас есть конструктивные и дружеские вопросы или вопросы, не стесняйтесь публиковать их здесь. Ключевые слова являются конструктивными и дружественными. * –

ответ

4

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

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

1

Оракул JVM принимает -Djava.compiler=NONE отключить JIT (-D устанавливает свойство системы, java.compiler is the property name, NONE это значение). Не знаю о .Net (C#).

3

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

По this post вы можете использовать GCJ, чтобы сделать что-то подобное для Java:

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

+0

Если я понимаю это правильно, @Azodious хочет запустить CIL в виртуальной машине .NET (в отличие от компиляции CIL для машинного кода вначале и изначально исполняемого скомпилированного кода). Ваше сообщение находится на совершенно другом вопросе: ** когда ** будет CIL для компиляции кода, специфичной для машины (предварительно сделанной NGen или при первом запуске с JIT-компилятором). – penartur

+0

@penartur во втором чтении, может быть, вы правы ... В этом случае ответ для .net - это то, что вы не можете :) –

+0

Не деактивировано/отключено jit, если вы запустите код под отладчиком? Существует очень большая разница между созданным кодом при его запуске в отладчике по сравнению с прикреплением отладчика к выполняемому процессу. – Voo

1

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

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

Смежные вопросы