2015-08-24 7 views
0

В качестве примера возьмите код операции btstecode getstatic. JVM выполняет проверку того, является ли поле ссылки статическим (или может быть экземпляром?) Разве это не избыточный шаг? Потому что, компилятор гарантирует, что поле статично. PS Возможно, точка-байт-код может быть изменен в течение времени выполнения.Почему виртуальная машина проверяет тип поля?

+1

Кто сказал, что я использовал компилятор для создания моего байт-кода? – aioobe

ответ

0

Разве это не избыточный шаг? Потому что, компилятор гарантирует, что поле статично.

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

+1

Проверка также может быть пропущена с использованием флага VM '-Xverify: none'. Это особенно полезно для таких программ, как Eclipse, которые из-за этого имеют длительные времена загрузки. – Clashsoft

+0

Есть ли у вас какие-либо объективные доказательства? Как >> сколько << ускоряет запуск Eclipse? –

+0

Не очень, но учитывая количество сдвигов классов, я думаю, что это не подлежит обсуждению. – Clashsoft

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