我正在考虑构建一个非常大的Java类,Java类可以有多少方法限制?它可以进入数以百万计的方法吗?
更新: 目的是,做一个“上帝”课。
答案 0 :(得分:53)
根据Java class file specification,限制为 65535 :
4.10 Java虚拟机的限制
Java虚拟机的以下限制隐含在
class
文件格式中:
- 可以由类或接口声明的方法数量限制为65535,大小为
methods_count
结构ClassFile
项的大小(§4.1)。请注意,methods_count
结构的ClassFile
项的值不包括从超类或超接口继承的方法。
答案 1 :(得分:14)
没有。 class file format spec中的一些相关内容:
Java虚拟机的以下限制隐含在类文件格式中:
ClassFile结构的16位constant_pool_count字段(第4.1节)将每类或每接口常量池限制为65535个条目。这是对单个类或接口的总复杂性的内部限制。
类或接口可以声明的方法数量被ClassFile结构(第4.1节)的methods_count项的大小限制为65535。请注意,ClassFile结构的methods_count项的值不包括从超类或超接口继承的方法。
我认为这意味着您可以拥有65535个方法,但前提是您没有其他对象占用常量池中的插槽(例如字段名称)。
除此之外,每种方法还有最大尺寸:
答案 2 :(得分:0)
虽然VM Spec中的methods_count是U2,因此65535,method_info的格式有一个name_index和一个descriptor_index,两者都必须指向常量池,它也有一个U2 constant_pool_count所以32767是最大值,即使这当然也是不可能,因为它不允许任何其他类名,超类字段等条目。