Ответ 1
Инструкция JSR на самом деле даже не разрешена в Java 7 classfiles. Это разрешено только в версиях версии 49.0 или более ранних классов, соответствующих Java 5 или ранее. На практике он не использовался задолго до этого.
Механизм JSR/RET изначально использовался для реализации блоков finally. Тем не менее, они решили, что сэкономить размер кода не стоит дополнительной сложности, и он постепенно прекращается.
Я не знаю точных версий, так как я не могу найти компиляторы, которые были старыми, но на основе обсуждений, которые я нашел в Интернете, похоже, что переход произошел в эпоху Java 1.2-1.3, причем разные компиляторы переключались на разные раз. Я никогда не видел законного файла классов из одного из этих старых компиляторов, но вы никогда не знаете, когда это может произойти.
На практике единственное использование JSR, которое я видел в дикой природе, - это обфускация. Например, Zelix Klassmaster использовал его для своего строкового кода дешифрования. Я также использовал его в нескольких моих собственных трещинах Java.