Какие компиляторы 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