jvm(二) 内存管理与虚拟机执行子系统
对象的创建(出数组,Class 对象)
1、当 jvm 遇到一个 new 指令时,首先检查是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析、初始化过,没有则执行相应的类加载过程。
2、加载过后分配内存(类在加载完成时就已经确定占用多大的内存,分配内存等是把堆中的内存划分出),有两种分配方式(使用那种方式取决于使用的垃圾收集器是否有整理功能):
3、对象分配内存安全性问题
对象的内存布局
1、在 hotSpot 虚拟机中,对象在堆中存储布局可以划分为三部分,对象头、实例数据、对其填充
2、对象头:对象头部分包含两类信息。
对象的访问
虚拟机执行子系统
1、Class 文件结构
魔数:Class 文件的头 4 个字节 0xCAFEBABE ,它是唯一确定这个文件是否位 Class 文件,很多文件都会使用魔数来标明文件格式,而不是使用后缀,因为后缀是可以修改的。
版本号: Java 版本号是 45 开始,在魔数的 后 4 位表示版本号,5、6 字节表示的是此版本号,7、8 字节表示的是主版本号 如下
被模块导出或者是开放的包
类或者是接口的全限定名
方法名称和描述符
方法句柄和方法类型
动态调用点和动态常量
1.4、字段表集合:用于描述接口或者是类中声明的变量,Java 语言中的子墩包括类级变量以及实例变量,可以修饰字段的包括 作用于(public,private、protected)、是实例变量还是类变量(static)、可变性(final)、并发可见性(volatile)、是否可序列化(transient)、字段数据类型、字段名称,各个修饰符都可以用 01 标识,要么有这个修饰符那么没有这个修饰符,所以使用固定的长度来标识;而字段类型于名称是无法固定,只能医用常量池中的常量来描述;
1.5、方法表集合、属性表集合 于字段表集合类似,只是使用的集合不同思想相同。
评论