2016-09-24 2 views
1

Каждый раз, когда мы запускаем приложение Java с помощью команды «java className», будет создан новый экземпляр jvm. Профайлер в режиме исполнения идентифицирует горячие точки, что означает многократное выполнение методов и добавление собственного кода этих горячих точек. Теперь все java-приложение будет интерпретировано хотя бы один раз и к тому моменту будут определены hotspots, поэтому в следующий раз, если мы запустим Java-приложение, то этот собственный код hotspots будет непосредственно принят и не будет интерпретироваться снова. Теперь мой вопрос: если мы снова запустим java-приложение, тогда будет создан новый экземпляр jvm, а горячие точки будут определены в предыдущем jvm. как это работает? Оба являются разными jvm.Как работает Profiler в JIT-компиляторе механизма выполнения?

ответ

0

Если я правильно понял вас, основным вопросом было бы следующее: - это информация, связанная с JIT (горячие точки и скомпилированный код), сохраняемая через перезапуски JVM?

Ответ обычно нет. JIT сохраняет всю эту информацию в Metaspace, все это создается во время выполнения, а затем исчезает при остановке JVM. Он не сохраняется нигде, и когда снова запускается новая JVM, оптимизация JIT будет переделана.

Почему «вообще»:
За последние годы были разговоры о фактической сохранении этой информации. OpenJDK сообщество рассматривает вопрос о его реализации, а также есть платное решение, которое фактически осуществляет эту функцию в качестве основной точки продажи:

Zing

+0

Так что, если мы снова запустить приложение Java, то те, вся информация уже не будет, как будет создан новый экземпляр jvm, тогда в чем смысл определения горячих точек? Как эти горячие точки можно использовать снова? – SurajPrajapati

+0

JVM идентифицирует горячие точки, поэтому он знает, какие части кода необходимо скомпилировать в двоичные. Если вы когда-нибудь захотите повторно использовать что-то из JIT, это будут не горячие точки, а фактический скомпилированный код. Но, как я писал выше, вы не можете их повторно использовать. Существуют некоторые технологии, которые пытаются предоставить такое решение, но они не являются общими, не широко используются, и в 99,99% случаев любое приложение Java, с которым вы сталкиваетесь, будет выполнять JIT во время выполнения, как следует из его названия (Just-In -Time-компилятор). –

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