2013-04-14 5 views
2

Я пытаюсь понять динамическое связывание в Java. Прочитав http://slurp.doc.ic.ac.uk/pubs/observing/linking.html#resolutionДинамическое связывание в Java: Verifier vs Resolution

Я не совсем понимаю разницу между верификатором байт-кода и процессом разрешения. Почему верификатор не выполняет проверки, выполненные с помощью разрешения?

ответ

2

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

Напротив, процесс проверки - это проверка того, что сами байткоды Не делай ничего плохого. Это не произойдет, если они были созданы с помощью правильного компилятора, но если байт-коды были созданы с помощью компилятора с ошибкой, методом багги-инъекций ... или каким-то плохим парнем, использующим байт-коды, то верификатор предоставляет линию защиты.

Главное отличие состоит в том, что разрешение имеет важное значение, но проверка (вроде) необязательна. Действительно, разделение разрешения и проверки означает, что проверка может быть отключена. Для этого есть опция командной строки. (Хорошо ли отключать проверку ... при нормальных обстоятельствах ... довольно сомнительно, ИМО.)

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