Java类可以拥有的最大方法数是多少?

时间:2010-12-03 03:00:25

标签: java class

我正在考虑构建一个非常大的Java类,Java类可以有多少方法限制?它可以进入数以百万计的方法吗?

更新: 目的是,做一个“上帝”课。

3 个答案:

答案 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个方法,但前提是您没有其他对象占用常量池中的插槽(例如字段名称)。

除此之外,每种方法还有最大尺寸:

  • 每个非本机非抽象方法的代码量由LineNumberTable属性(第4.7.8节)中Code属性(第4.7.3节)的exception_table中索引的大小限制为65536字节),以及LocalVariableTable属性(§4.7.9)。

答案 2 :(得分:0)

虽然VM Spec中的methods_count是U2,因此65535,method_info的格式有一个name_index和一个descriptor_index,两者都必须指向常量池,它也有一个U2 constant_pool_count所以32767是最大值,即使这当然也是不可能,因为它不允许任何其他类名,超类字段等条目。