在java虚拟机中对象的创建:
1.虚拟机在遇到new关键字先去常量池寻找这个类的符号引用来检查该引用的类是否已经被加载解析和初始化,若没有则执行类加载过程
2.分配内存空间
两种方法:指针碰撞(内存规整)、空闲列表(内存不规整)
在面临并发的时候有两种方法解决内存冲突,一同步处理采用CAS和失败重试的方法保证更新操作的原子性;二采用本地线程分配缓冲就是预先分配一小块内存用完采用同步锁定操作
3初始化对象内存空间
4对象设置
对对象进行设置例如类的实例对象的哈希值,这些信息存在对象头中之后执行init方法
对象的内存分布:
对象头:存对象本身的运行时数据,类型的指针
实例数据:对象真正存储的有效信息
对齐填充:占位符作用
对象的访问定位
一句柄访问:reference存储的是句柄地址,在java堆中划分一块内存作为句柄池包含(对象实例数据与类型数据各自的具体地址信息)
二、直接指针:reference直接指向java堆中类对象地址在java堆中含有指向对象类型数据的指针
对象创建,内存布局,对象的访问定位
最新推荐文章于 2022-01-02 11:54:30 发布
本文详细介绍了Java虚拟机中对象的创建流程,包括类的加载、内存分配、对象初始化等步骤,并解释了对象的内存分布,如对象头、实例数据及对齐填充等组成部分。此外还探讨了对象的两种访问方式:句柄访问与直接指针。
摘要由CSDN通过智能技术生成