Почему JSR / RET устарел Java-байт-код? - PullRequest
11 голосов
/ 03 мая 2011

Кто-нибудь знает, почему пара байт-кодов JSR / RET устарела в Java 6?

Единственное значимое объяснение, которое я нашел в сети, заключалось в том, что они усложняли и замедляли анализ кода во время выполнения.Кто-нибудь знает другую причину?

1 Ответ

11 голосов
/ 03 мая 2011

JSR и RET значительно затрудняют проверку байт-кода, чем это могло бы быть из-за ослабления некоторых нормальных ограничений байт-кода (таких как наличие согласованной формы стека при входе в JSR). Потенциал очень незначительный (потенциально несколько меньшие методы в некоторых случаях), и сохраняющиеся трудности в верификаторе, работающие с нечетными шаблонами JSR / RET (и потенциальными уязвимостями безопасности, и связанные с этим затраты времени выполнения полной проверки), делают его бесполезной функцией продолжать иметь.

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

...