Как узнать метод JITed или интерпретируется - PullRequest
3 голосов
/ 26 мая 2011

Как я понимаю, нет четкого правила, чтобы определить, будет ли метод JIT или JIT интерпретироваться во время вызова.Так есть ли как-то сказать JVM, что мне нужен определенный метод для JITed.И есть ли способ точно знать, какой метод будет JITed, а какой нет.

Ответы [ 5 ]

5 голосов
/ 26 мая 2011

Насколько я знаю, вы не знаете (изнутри JVM) и не можете принудительно применить метод JITed или нет, но используя аргумент -XX:+PrintCompilation JVM, вы можете посмотреть, как JIT-компилятор выполняет свою работу, и проверить, если метод получает JITed в данном конкретном прогоне программы или нет.

1 голос
/ 26 мая 2011

Так что, как-нибудь сказать JVM, что мне нужен определенный метод для JIT.

Нет, какие методы "JITed" и не зависит от вас, и на самом деле, нет никакой гарантии, что любой метод когда-либо будет JITed. Я предлагаю вам оставить эти решения в JVM.

0 голосов
/ 26 мая 2011

Вы не можете сказать, и нет никакого способа, которым это имеет какое-либо значение, за исключением ошибок в HotSpot.Термин «JIT» устарел как минимум на десять лет.

0 голосов
/ 26 мая 2011

Существует способ попросить jvm скомпилировать класс, он не гарантирует ничего, но должен работать на любом jvm с jit.

Compiler.compileClass(MyClass.class);
0 голосов
/ 26 мая 2011

И есть ли способ точно узнать, какой метод будет JITed, а какой нет.

JVM (Oracle) Sun называется HotSpot, что означает, что он смотрит, какие методывызывается чаще всего, таким образом, становится «горячим», и эти методы компилируются первыми.Поэтому некоторые методы могут никогда не скомпилироваться.Но если вы знаете, что метод часто вызывается, он, скорее всего, будет скомпилирован.Вы можете установить порог с помощью параметров -XX:CompileThreshold=10000 VM, которые определяют, сколько вызовов требуется, чтобы считать метод «горячим».

Я не знаю, как проверить, является ли текущийкод выполняется в интерпретированном или скомпилированном режиме.Журналы сбоев ВМ показывают, какие методы в трассировке стека интерпретируются или компилируются, возможно, есть какой-то способ получить его во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...