JVM规范对类文件没有限制,并且由于类文件是可扩展的容器,支持任意的自定义属性,因此您甚至可以根据需要将其最大化。
每个属性具有大小字段的的
u4类型,因此,可以指定一个数字向上的至
2³²-1(
4GiB)。实际上,由于JRE
API(
ClassLoader方法,Instrumentation
API和
Unsafe)全部一致地使用
byte[]或
ByteBuffer描述类文件,因此不可能创建具有多于
2³¹-1字节(
2GiB)的类文件的运行时类。
换句话说,即使是单个自定义属性,其大小也可能超过实际可加载类的大小。但是,一个类可以具有65535个属性,外加65535个字段,每个字段都具有自己的65535个属性,以及65535个方法,每个方法也最多具有65535个属性。
如果您进行数学计算,您将得出结论,仍然格式正确的类文件的理论最大值可能会超出任何实际存储空间(超过2个字节)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)