Java .class文件的最大大小是多少?

.class文件是一个相当有据可查的格式定义部分和大小,因此,最大尺寸为好。

例如,一个.class文件包含一个幻数(4个字节),一个版本(4个字节),常量池(可变大小)等。但是大小可以在几个级别上定义:您可以有65535个方法,每个方法都限于65535字节。

如果需要,将答案限制为Java。这意味着如果Scala或Clojure(或…)更改了一些限制,请忽略这些值。

回答:

JVM规范对类文件没有限制,并且由于类文件是可扩展的容器,支持任意的自定义属性,因此您甚至可以根据需要将其最大化。

每个属性具有大小字段的的u4类型,因此,可以指定一个数字向上的至2³²-14GiB)。实际上,由于JRE

API(ClassLoader方法,Instrumentation

API和Unsafe)全部一致地使用byte[]ByteBuffer描述类文件,因此不可能创建具有多于2³¹-1字节(2GiB)的类文件的运行时类。

换句话说,即使是单个自定义属性,其大小也可能超过实际可加载类的大小。但是,一个类可以具有65535个属性,外加65535个字段,每个字段都具有自己的65535个属性,以及65535个方法,每个方法也最多具有65535个属性。

如果您进行数学计算,您将得出结论,仍然格式正确的类文件的理论最大值可能会超出任何实际存储空间(超过2个字节)。

以上是 Java .class文件的最大大小是多少? 的全部内容, 来源链接: utcz.com/qa/414756.html

回到顶部