Java对象的创建与内存布局

对象的内存布局:(HotSpot)

对象头:分为两块,分别是“Mark Word”与类型指针。

              Mark Word:存储自身运行时数据,比如说哈希码,线程持有的锁啊,锁状态啊,GC年龄分代这些数据。

              类型指针:指向它类元数据的指针,虚拟机通过这个指针可以知道这是哪个类的实例啊。(不是所有的虚拟机上都有)

实例数据:对象真正的存储的有效信息,也是程序代码中所定义的各种字段的内容。

对齐填充(不一定需要存在):占位符。在HotSpot VM当中对象大小必须是8字节的整数倍,不是就利用占位符填充

 

对象的创建:

在Java语言层面,对象的创建通常只需要new一下就好。但是在虚拟机层面,对象的创建旺旺需要几步操作:

1.虚拟机遇到一条new指令的时候,回去检查这个指令的参数是否能在常量池当中定位到一个类符号的引用,之后检查这个符号代表的类是否被加载、解析和初始化,如果没有,那必须先执行相应的类的加载过程。 

2.加载检验后为对象在堆中分配内存。

3.初始化分配的内存,将内存空间大小地初始化为零值。

4.对对象进行一些必要的设置 Mark Word

5.执行<init>方法将对象按照意愿进行初始化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值