Подтвердить что ты не робот

Почему Java ограничивает размер метода до 65535 байт?

Я только что скомпилировал следующий код

public class A {
    public static void main(String... args) {
        int i = 3;
        ++i; 
        ++i;
        ++i;
        ++i;
        ++i;
        ++i;
        ++i;
        ++i;
        // repeat writing the expression ++i for 20,000 times

        System.out.println(i);
    }
}

И получил следующее сообщение об ошибке

Код метода main (String...) является превысив предел 65535 байт

Почему Java реализует этот предел? Я не вижу рационального, так как Java включает инструкцию goto_w.

4b9b3361

Ответ 1

См. Спецификация виртуальной машины Java, раздел 4.10:

4.10 Ограничения виртуальной машины Java

  • Количество кода для нелокального, не абстрактного метода ограничено 65536 байтами размерами индексов в таблице exception_table атрибута Code (§4.7.3) в атрибуте LineNumberTable (§4.7.8). ) и в атрибуте LocalVariableTable (§4.7.9).

Есть несколько веских причин иметь метод, который долгое время находится на объектно-ориентированном языке программирования.