对象布局及执行引擎
创建对象的方式?
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中的执行引擎充当了将高级语言翻译为机器语言的译者。
浙公网安备 33010602011771号