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

Какое максимальное количество методов может иметь класс Java?

Я собираюсь построить ОЧЕНЬ большой Java-класс, есть ли ограничение на количество методов, которые может иметь класс Java? Может ли он пойти на миллионы методов?

обновление: Цель состоит в том, чтобы сделать класс "Бог".

4b9b3361

Ответ 1

В соответствии с спецификацией файла Java класса предел 65535:

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

Следующие ограничения виртуальной машины Java неявны в формате файла class:

  • Число методов, которые могут быть объявлены классом или интерфейсом, ограничено размером 65535 размером methods_count элемента структуры ClassFile (п .4.1). Обратите внимание, что значение элемента methods_count структуры ClassFile не включает методы, наследуемые от суперклассов или суперинтерфейсов.

Ответ 2

Нет. Некоторые соответствующие фрагменты из спецификация формата файла класса:

Следующие ограничения виртуальной машины Java неявны в формате файла класса:

  • Пул констант для каждого класса или каждого интерфейса ограничен 65535 элементами 16-разрядного поля constant_pool_count структуры ClassFile (§ 4.1). Это действует как внутренний предел общей сложности одного класса или интерфейса.

  • Число методов, которые могут быть объявлены классом или интерфейсом, ограничено 65535 размером элемента method_count структуры ClassFile (§ 4.1). Обратите внимание, что значение элемента methods_count структуры ClassFile не включает методы, которые унаследованы от суперклассов или суперинтерфейсов.

Я думаю, это означает, что вы можете иметь 65535 методов, но только если у вас нет других объектов, которые занимают слоты в постоянном пуле (например, имена полей).

Кроме того, для каждого метода максимальный размер:

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

Ответ 3

Хотя method_count в VM Spec является U2 и, следовательно, 65535, формат method_info имеет имя_индекс и дескриптор_индекса, оба из которых должны указывать в пул констант, который также имеет U2 constant_pool_count, поэтому 32767 является максимальным, даже это, конечно, невозможно, так как не допускает никаких других записей для имени класса, полей суперкласса и т.д.

Ответ 4

Класс Java или интерфейс могут иметь не более 65535 методов. Код конструктора в Java ограничен 65535 байтами. Это также относится к максимальному количеству портов TCP/UDP, доступных на машине.