Максимальные строки кода, допустимые в классе Java?

17

Сколько строк кода может содержать файл .java ? Это зависит от используемой JVM?

    
задан kiritsinh parmar 20.09.2008 в 12:39
источник

5 ответов

29

Чтобы перейти к ответ Джонаса , спецификация виртуальной машины Java, Раздел 4.8 Ограничения на Java Virtual Machine Code говорит, что:

  

Код виртуальной машины Java для   метод, метод инициализации экземпляра   (§3.9), или класс или интерфейс   метод инициализации (§3.9) сохраняется   в массиве кода кода   атрибут структуры method_info   файла класса. Эта секция   описывает связанные с этим ограничения   с содержанием   Структура Code_attribute.

Продолжая раздел 4.8.1, Static Constraints

  

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

     

Статические ограничения на   инструкции в массиве кода:   следующим образом:

     

...

     
  • Значение элемента code_length должно быть меньше 65536.
  •   

...

Таким образом, у метода есть предел в 65535 байт байт-кода для каждого метода. (см. примечание ниже)

Дополнительные ограничения для JVM см. в Раздел 4.10 Ограничения виртуальной машины Java .

Примечание. Хотя, по-видимому, проблема с конструкцией JVM, если инструкция в байте 65535 является инструкцией длиной 1 байт, она не защищена обработчиком исключений - это указано в сноске 4 раздела 4.10.     

ответ дан coobird 20.09.2008 в 13:09
источник
7

Я считаю, что ограничение на размер байт-кода на один метод ограничено на 64 КБ.

    
ответ дан Jonas Klemming 20.09.2008 в 12:49
источник
  • Существует ошибка / rfe, зарегистрированная с помощью Sun для этого на bugs.sun.com/bugdatabase/view_bug.do?bug_id=4262078 –  Brian Matthews 20.09.2008 в 12:58
  • Ошибка больше не существует. Или, по крайней мере, он уже не является общедоступным. RFE, связанные с аналогичными ограничениями, были закрыты, поскольку «не исправить». –  Stephen C 27.03.2016 в 03:18
4

Нет ограничений на «строки кода», но существует ограничение на общий размер. Каждый метод имеет ограничение 64 КБ.

Я только сталкивался с этим с помощью инструментов генерации кода.

Если вы приближаетесь к пределу, будьте осторожны. Многие инструменты профилирования и мониторинга используют байтовую вставку кода. Они могут подтолкнуть вас сверху, если вы слишком близко. Хуже всего то, что они часто меняют ваши файлы классов после компиляции. Все компилируется и запускается в среде разработки, но сбой при включении ваших средств мониторинга в Test или QA.

    
ответ дан John 20.09.2008 в 17:48
источник
3

Я помню, как на самом деле работал в этом лимите один раз на сложной странице JSP в Tomcat 4 (ранее в прошлом, когда люди все еще пользовались JSP). У java-файла, созданного с помощью JSP, был метод, который был слишком большим для компиляции, я думаю, что мне пришлось разделить файл или сделать какой-то другой трюк, который, конечно же, был хорошей идеей с точки зрения удобочитаемости.

Отслеживание ошибок Sun говорит мне, что у некоторых людей все еще есть те же проблемы .

    
ответ дан Henning 20.09.2008 в 15:32
источник
  • был там. работал над JSP, который включал целую кучу JSP в цикле или что-то в этом роде. –  Ken Liu 28.08.2009 в 06:50
0

Как уже упоминалось выше, нет ограничений на «строки кода» для каждого класса в java, мы, вероятно, можем использовать 200 строк в качестве хорошего ориентира и не превышать 500 строк в классе.

    
ответ дан Nadhu 07.02.2018 в 17:55
источник