java虚拟机规范---java虚拟机对class文件的限制
来源:互联网 发布:傻强是不是卧底 知乎 编辑:程序博客网 时间:2024/06/01 09:37
下面为隐含在Class文件格式中的java虚拟机限制:
- 每个类活接口的常量池最多为65535个,它是由ClassFile结构中的16位const_pool_count字段的值决定,这限制了单个类或接口的复杂度;
- 方法调用时创建的栈帧的局部变量表中的最大局部变量个数65535个,它是由方法代码所处的Code属性中的maxx_locals项的值和java虚拟机指令集的16位局部变量索引决定。注意,每个long和double类型都被认为会使用两个局部变量位置并占据max_locals中的两个单元,所以使用这些类型时局部变量的限制的最大值就会相应㝶减少;
- 类或接口中可以声明的字段数最多为65535个,它是由ClassFile结构中的fields_count项的值决定的,注意ClassFile结构中的fields_count项的值不包含从父类或父接口中继承下来的字段;
- 类或接口中可以声明的方法数最多为65535个,它是由ClassFile结构中的methods_count项的值所决定。注意,ClassFile结构中的methods_count项的值不包含从父类或父接口中继承下来的方法;
- 类或接口的直接父接口数量最多为65535个,它是由ClassFile结构中的interfaces_count项的值所决定的;
- 方法栈中的操作数栈的大小深度为65535,它是由Code属性的max_stack字段值来决定。需要注意的是每个long和double类型的数据被认为占用max_locals中的两个单元,所以使用这些类型时,操作数栈的限制的最大值就会相应的减少;
- 数组的维度最大为255维,这由multianewarray指令的dimensions操作码及multianewarray,anewarry和newarray指令的约束来决定;
- 方法的参数最多有255个,它是由方法描述符的定义所限制,如果方法调用是针对实例或接口方法,那么这个限制也包含着占有一个单元的this。注意对于定义在方法描述符中的参数长度来说,每个long和double参数都会占用两个长度单位,所以如果有这些类型的话,最终的限制的最大值将会变小;
- 字段和方法名称,字段和方法描述符以及其他常量字符串值(由ConstantValue属性引用的值)最大长度为65535个字符,它是由CONSTANT_Utf8_info结构的16位无符号length项决定。需要注意的是,这里的限制是已编码字符串的字节数量而不是被编码的字符数量。UTF-8一般用两个或三个字节来编码字符,因此,当字符串中包含多字节字符时,会受到更大的约束。
阅读全文
0 0
- java虚拟机规范---java虚拟机对class文件的限制
- JAVA虚拟机规范读书笔记--class文件结构及数据类型
- java虚拟机Class类文件的结构
- java虚拟机 Class类文件的结构
- Java虚拟机之Class文件
- Java虚拟机和Class文件
- java 虚拟机的内存限制
- Java虚拟机(一)-Java的class文件详解
- Java 虚拟机限制
- java虚拟机规范
- Java 7 虚拟机规范
- Java虚拟机规范读书笔记
- 深入java虚拟机--Class文件实例解析
- 深入java虚拟机,了解.class文件
- 深入Java虚拟机:Class文件实例解析
- Java虚拟机如何加载Class文件
- Java虚拟机中的Class类文件结构
- Java虚拟机--Class文件结构(十七)
- 海外SDK之----------谷歌支付
- 修改ECSHOP后台管理中心的Title信息
- centos6/7 装 git gogs服务
- 基于TensorFlow的Cats vs. Dogs(猫狗大战)实现和详解(1)
- OSI,TCP/IP,五层协议的体系结构,以及各层协议
- java虚拟机规范---java虚拟机对class文件的限制
- 排序算法之冒泡排序
- deepin开发环境配置笔记
- Hive 自定义函数(UDF)开发
- windows远程桌面设置
- iOS
- 内存栅栏:软件高手的硬件观(三)
- spring配置文件命名空间插件springsource-tool-suite
- Android VR Player(全景视频播放器) [4]:侧滑菜单的实现