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