对象布局及执行引擎
创建对象的方式?
1.new
2.Class的newInstance()
3.Constructor的newInstance(xxx)
4.使用clone()
5.使用反序列化
6.第三方库Objenesis
创建对象的步骤?
1.判断对象对应的类是否加载、链接、初始化
2.为对象分配内存
3.处理并发安全问题:采用CAS失败重试,区域加锁保证更新的原子性
4.初始化分配到的空间:所有属性设置默认值,保证对象实例字段在不赋值时可以直接使用
5.设置对象的对象头:将对象的所属类(即累的元数据信息)、对象的HashCode和对象的GC信息、锁信息等数据存储在对象的对象头中。这个过程的具体设置方式取决于JVM实现。
6.执行init方法进行初始化:显示初始化 代码块中初始化 构造器初始化
内存布局?
对象头(Header):
运行时元数据(Mark Word):哈希值、GC分代年龄、锁状态标志、线程持有的锁、偏向线程 ID、偏向时间戳
类型指针:指向类元数据,确定该对象所属的雷翔
实例数据:他是对象真正储存的有效信息,包括程序代码中定义的各种类型的字段
对齐填充:不是必须的,仅仅起到占位符的作用。
执行引擎概述?
JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,他的内部包含的仅仅只是一些能够被JVM所识别的字节码指令、符号表,以及其他辅助信息。
那么,如果想要让一个java程序运行起来,执行引擎的任务就是将字节码指令解释\编译为对应平台上的本地机器指令才可以。简单来说,JVM中的执行引擎充当了将高级语言翻译为机器语言的译者。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix