Использование-noverify при запуске приложений Java

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

В документе Java говорится это -noverify выключает проверку класса.

Однако, почему кто-либо хотел бы выключить проверку, даже если они оснащают классы?

35
задан Drew Noakes 25 August 2012 в 12:49
поделиться

3 ответа

Время запуска, сказал бы я. Проверка, что классы корректны, занимает время, когда класс загружается. Так как классы могли бы быть загружены ленивым способом (не на приложении, запускаются, но будучи используемым впервые), это могло бы вызвать неожиданные и нежелательные задержки во время выполнения.

На самом деле класс не должен быть проверен в целом. Компилятор не испустит недопустимого байт-кода или конструкции класса. Причина проверки состоит в том, что класс может быть, основываются на одной системе, размещаются онлайн и передается Вам через незащищенный Интернет. На этом пути злонамеренный взломщик мог бы изменить байт-код и создать что-то, что компилятор никогда не мог бы создавать; что-то, что может разрушить JVM или возможно обходит ограничения безопасности. Таким образом класс проверяется, прежде чем он будет использоваться. Если это - локальное приложение, обычно нет никакой потребности проверить байт-код снова.

37
ответ дан Mecki 27 November 2019 в 06:37
поделиться

Отладка! На самом деле это - то, что я делаю теперь, и как я споткнулся через этот вопрос. В Terracotta мы делаем большой инструментарий байт-кода, и иногда это помогает выключить верификатор, поскольку мы отлаживаем наши адаптеры класса, таким образом, мы видим, где точно они перестали работать во времени выполнения.

Вы правы, мы хотим, чтобы верификатор остался на в производстве.

5
ответ дан Scott Bale 27 November 2019 в 06:37
поделиться

Время запуска раньше было чем-то вроде проблемы. Однако верификаторы теперь быстрее, как процессоры. Код, скомпилированный с JDK6 javac, будет по умолчанию включать дополнительную информацию, чтобы заставить верификатор ступить быстрее. Гармония Apache просто использует намного более быстрый алгоритм проверки.

Некоторые очень старые версии javac произвели неправильный байт-код. Действительно Sun PlugIn все еще включает код фиксации, чтобы заставить некоторые поврежденные файлы класса проверить.

3
ответ дан Tom Hawtin - tackline 27 November 2019 в 06:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: