Почему 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.
Ответы
Ответ 1
См. Спецификация виртуальной машины Java, раздел 4.10:
4.10 Ограничения виртуальной машины Java
- Количество кода для нелокального, не абстрактного метода ограничено 65536 байтами размерами индексов в таблице exception_table атрибута Code (§4.7.3) в атрибуте LineNumberTable (§4.7.8). ) и в атрибуте LocalVariableTable (§4.7.9).
Есть несколько веских причин иметь метод, который долгое время находится на объектно-ориентированном языке программирования.