对象布局及执行引擎

创建对象的方式?

  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中的执行引擎充当了将高级语言翻译为机器语言的译者。

 

posted @   WXY_WXY  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示