Java类中允许的最大代码行数是多少?

28

.java文件中可以包含多少行代码?这取决于使用的JVM吗?

5个回答

35

为了补充乔纳斯的回答, 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个字节长的指令,则不受异常处理程序保护-这在第4.10节的脚注4中列出。

9
我认为每个方法的字节码大小限制为64kb。

这个问题/需求已经在Sun的http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4262078上记录了。 - Brian Matthews
该错误不再存在。或者说,它不再公开可见。与类似限制相关的RFE已被关闭为“不会修复”。 - Stephen C

8

“代码行数”没有限制,但总大小有限制。每个方法有一个64kb的限制。

我只在使用代码生成工具时遇到过这种情况。

如果你接近限制,请小心。很多性能分析和监控工具使用字节码插入。如果你太靠近限制,它们可能会把你推到顶端。更糟糕的是,它们经常在编译后修改你的类文件。所有东西都可以在开发环境中编译和运行,但在测试或QA中打开监控工具时却会崩溃。


7

如上所述,在Java中没有“代码行数”的类限制,我们可以将每个类的行数控制在200行以下,并尽量不超过500行。


1
请问在安卓中如何处理它,因为仅仅是UIview转换和JSON解析就已经超过了500行的基础级别。如果您有任何技巧或建议,请分享一下。提前感谢您。 - MohanRaj S
1
如果我们在业务级别的类中有20个方法,每个方法包含30行代码,那该怎么办? - vigamage
1
@MohanRajS JSON解析应该放在单独的类中,活动只应包含直接与UI相关的基本方法和变量。有关更多详细信息,请参阅M-V-V-M架构https://developer.android.com/topic/libraries/architecture/viewmodel - Nauman Aslam

5
我记得曾经在Tomcat 4中的一个复杂JSP页面中遇到过这个限制(在人们仍然使用JSP时)。从JSP生成的Java文件有一个方法太大无法编译,我认为我不得不拆分文件或做一些其他花招,当然从可读性的角度来看这是一个好主意。
Sun的错误跟踪器告诉我一些人仍然存在相同的问题

曾经有过这样的经历,处理一个包含大量JSP循环嵌套的JSP页面。 - Ken Liu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接