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