Какие компиляторы Java используют инструкцию jsr и для чего?

Язык байт-кода Java имеет инструкцию JSR.

Ни один код, который я скомпилировал с помощью компилятора Java 7, не использует эту инструкцию.

Тем не менее, иногда я загружал исполняемые файлы Java, хотя и редко.

Мне было бы интересно узнать, какие компиляторы действительно используют инструкцию, и какие конструкции кода Java заставили бы их использовать ее.

Изменить это не дубликат, поскольку он ссылается на инструкцию байт-кода JSR, а не на запрос спецификации Java

2 ответа

Решение

Инструкция JSR фактически даже не разрешена в файлах классов Java 7. Это разрешено только в версии 49.0 или более ранних файлах классов, соответствующих Java 5 или более ранним версиям. На практике он вышел из употребления задолго до этого.

Механизм JSR/RET изначально использовался для реализации блоков finally. Тем не менее, они решили, что экономия размера кода не стоила дополнительной сложности, и она постепенно прекратилась.

Я не знаю точных версий, так как не могу найти ни одного старого компилятора, но на основании обсуждений, которые я нашел в Интернете, кажется, что переход произошел в эпоху Java 1.2-1.3, когда разные компиляторы переключались в разное время. Я никогда не видел законный файл классов от одного из этих старых компиляторов, но вы никогда не знаете, когда это могло произойти.

На практике единственное использование JSR, которое я видел в дикой природе, - это запутывание. Например, Zelix Klassmaster использовал его для своего кода расшифровки строки. Я также использовал это в нескольких моих собственных кряквах Java.

Согласно спецификации JVM:

В реализации Oracle компилятора для языка программирования Java до Java SE 6, jsr инструкция была использована с ret инструкция по реализации пункта finally

Другие вопросы по тегам