搜索

pdf文档 Java 对象的创建过程

389.87 KB 4 页 2 下载 194 浏览 0 评论 0 收藏
所属分类: 后端开发 / Java
语言 格式 评分
中文(简体)
.pdf
3
摘要
Java对象的创建过程分为五个主要步骤:首先进行类加载检查,确保类已加载并初始化;然后为对象分配内存,采用指针碰撞或空闲列表方式,同时考虑并发安全问题;接着初始化内存空间为零值,确保字段可直接使用;随后设置对象头信息,包括对象类型、哈希码等;最后执行<init>()方法完成对象初始化。对象的访问定位可通过句柄或直接指针实现。
AI总结
### Java 对象的创建过程总结 Java 对象的创建过程可以分为以下几个关键步骤: 1. **类加载检查** 虚拟机在遇到 `new` 指令时,首先检查该类的符号引用是否在常量池中,并确认该类是否已被加载、连接、解析和初始化。如果没有,则执行类加载操作。 2. **内存分配** 内存分配的任务是从 Java 堆中划分一块与对象大小相等的内存空间。分配方式主要有两种: - **指针碰撞**:适用于规整的内存空间,通过移动指针完成内存分配。 - **空闲列表**:适用于碎片化内存,通过维护空闲内存列表找到合适块。 为解决并发安全问题,虚拟机采用 `CAS + 失败重试` 或为每个线程分配 `TLAB`(Thread Local Allocation Buffer)的方式。 3. **初始化零值** 分配内存后,虚拟机将内存空间初始化为零值(不包括对象头),确保字段在未初始化时可以直接使用其零值。 4. **设置对象头** 在对象头中记录元数据信息,如对象的类型、哈希码、GC 分代年龄等。具体设置方式取决于是否启用偏向锁。 5. **执行构造方法** 虚拟机调用构造方法 `()`,根据程序员的定义完成对象的初始化,使对象具备实际功能。 ### 对象的访问定位 Java 程序通过栈上的 `reference` 数据访问堆中的对象。主流的访问方式有两种: - **句柄**:`reference` 存储句柄地址,句柄中包含对象实例和类型数据的地址信息。 - **直接指针**:`reference` 直接存储对象地址,访问速度快但不支持对象移动。 这两种方式各有优缺点,选择取决于具体需求和虚拟机实现。 ### 总结 Java 对象的创建过程包括类加载检查、内存分配、初始化零值、设置对象头和执行构造方法。这些步骤确保了对象的正确创建和初始化,同时虚拟机通过优化内存分配和访问方式提升了效率。
P1
P2
P3
P4
下载文档到本地,方便使用
文档评分
请文明评论,理性发言.