关于Java中的对象 Object o = new Object()

一、对象的创建过程

1.class loading:将new T()加入到内存

2.class linking(verification,preparation,resolution)

3.class initializing

4.申请对象内存:申请new T()内存大小

5.成员变量赋默认值:如果T变量m=8,则给m赋值为0.

6.调用构造方法<init>

    1).成员变量顺序赋初始值:将T中变量m赋值为8

    2).执行构造方法语句:先调用父类super()

二、对象在内存中的存储布局

观察虚拟机配置:java -XX:+PrintCommandLineFlags -version

普通对象

    1.对象头:markword 8

    2.ClassPointer指针: -XX:+UseCompressedClassPointers为4自己 不开启为8字节

    3.实力数据

    4.Padding对齐,8的倍数

数组对象

    1.对象头:markword 8

    2.ClassPointer指针同上

    3.数组长度:4字节

    4.数组数据

    5.对齐 8的倍数

三、对象具体包括什么(还没搞懂)

四、对象怎么定位

Tt = new T()

1.句柄池:t一个指针指向创建的对象,一个指针指向T.class

2.直接指针:t指针指向创建的对象,对象指针指向T.class

五、对象怎么分配(和GC有关,还未了解)

 

六、Object o = new Object()在内存中占用多少字节

markword + ClassPointer + Padding = 8 + 4 + 4 = 16

       

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值