Java类中允许的最大代码行数?
.java
文件包含多少行代码? 它取决于使用的JVM吗?
为了扩展Jonas的响应 ,Java虚拟机规范, 第4.8节关于Java虚拟机代码的约束说:
方法,实例初始化方法(第3.9节)或类或接口初始化方法(第3.9节)的Java虚拟机代码存储在类文件的method_info结构的Code属性的代码数组中。 本节描述与Code_attribute结构的内容相关的约束。
继续第4.8.1节,静态约束
类文件的静态约束是定义文件格式良好的约束。 除了类文件的Java虚拟机代码的静态约束之外,这些约束已在上一节中给出。 类文件中Java虚拟机代码的静态约束指定了必须如何在代码数组中布置Java虚拟机指令以及各个指令的操作数必须是什么。
代码数组中指令的静态约束如下:
…
- code_length项的值必须小于65536。
…
因此,每个方法的方法确实具有65535字节的字节码限制。 (见下面的注释)
有关JVM的更多限制,请参见部分4.10 Java虚拟机的限制 。
注意:尽管JVM的设计显然存在问题,但如果字节65535处的指令是1字节长的指令,则它不受exception处理程序的保护 – 这在4.10节的脚注4中列出。
我相信每种方法的字节码大小限制为64kb。
“代码行”没有限制,但总大小有限制。 每种方法都有64kb的限制。
我只使用代码生成工具遇到过这种情况。
如果你接近极限,要小心。 许多分析和监视工具使用字节代码插入。 如果距离太近,他们会把你推到顶端。 更糟糕的是,它们经常在编译后改变你的类文件。 所有内容都在您的开发环境中编译和运行,但是当您在Test或QA中打开监视工具时它会崩溃。
我记得在Tomcat 4的一个复杂的JSP页面中曾经遇到过这个限制(过去当人们还在使用JSP时)。 从JSP生成的java文件有一个太大而无法编译的方法,我想我必须拆分文件或做一些其他的噱头,无论如何这当然是一个好主意。
Sun的bug追踪器告诉我一些人仍然有同样的问题 。
如上所述,java中每个类的“代码行”没有限制,我们可以使用200行作为一个好的指导,每个类不超过500行。