.class
文件是一个相当well documented format它定义了部分和大小,因此也定义了最大大小。
例如,.class
文件包含一个魔数(Magic Number)(4 个字节)、一个版本(4 个字节)、常量池(可变大小)等。但大小可以在多个级别:可以有 65535 个方法,每个方法限制为 65535 个字节。
其他限制是什么?而且,如果您要制作最大的 .class
文件,它会有多大?
如果需要,请将答案限制为 Java。这意味着如果 Scala 或 Clojure(或...)更改了一些限制,请忽略这些值。
最佳答案
JVM 规范没有强制限制类文件,因为类文件是可扩展的容器,支持 arbitrary custom attributes ,您甚至可以根据需要将其最大化。
每个 attribute has a size field u4
类型的,因此,可以指定最多 2³²-1
(4GiB
) 的数量。因为在实践中,JRE API(ClassLoader
方法、Instrumentation API 和 Unsafe
)都始终使用 byte[]
或 ByteBuffer
来描述类文件,不可能创建超过 2³¹-1
个字节(2GiB
)的类文件的运行时类。
换句话说,即使是单个自定义属性的大小也可能超过实际可加载类的大小。但是一个类可以有 65535 个属性,加上 65535 个字段,每个字段有 65535 个自己的属性和 65535 个方法,每个方法最多也有 65535 个属性。
如果您进行数学计算,您会得出结论,仍然格式良好的类文件的理论最大值可能超过任何实际存储空间(超过 2⁶⁵ 字节)。
关于java - Java .class 文件的最大大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42294998/