你真的了解Java对象吗

一、什么是Java对象

  Java对象是一类事物的抽象,有状态和行为。

二、Java对象的创建过程

2.1、Class加载

2.2、Class 链接 (验证、准备、解析)

2.3、申请对象内存

2.4、成员变量赋默认值

2.5、调用构造方法

  1、成员变量赋初始值

  2、执行构造方法语句

三、Java对象的布局、结构

4.1、普通对象

  1、对象头 markword   

  2、ClassPointer指针  (启动参数   -XX:+UserCompressedClassPointers 开启时为4字节,不开启为8字节)

  3、实例数据  (引用类型, -XX:+UserCompressedClassPointers 开启时为4字节,不开启为8字节)

  4、Padding对齐  8的倍数

4.2、数组对象

  1、对象头 markword   

  2、ClassPointer指针  (启动参数   -XX:+UserCompressedClassPointers 开启时为4字节,不开启为8字节)

  3、数组的长度

  4、实例数据  (引用类型, -XX:+UserCompressedClassPointers 开启时为4字节,不开启为8字节)

  5、Padding对齐  8的倍数

四、Java对象头的结构

  对象头包含两部分内容:

1、对象的状态信息

  对象的锁信息(2位标识当前对象锁的状态,记录锁升级后,当前对象是何种锁),hashcode信息

2、类型指针

  通过类型指针了解对象时哪个类的实例

五、对象的访问/对象的定位

1、句柄

  相较于直接指针方式,通过句柄方式访问对象的速率慢,但垃圾回收速率快

    

2、直接指针

   相较于句柄方式,通过直接指针方式访问对象的速率快,但垃圾回收速率慢

        

六、对象的大小

  针对64位,Object o = new Object(); 在内存中占用了多少字节

  1、markword   8字节

  2、UseCompressed 开启压缩    4字节, 不开启压缩 8字节

  3、实例数据   0 字节

  4、Padding对齐   8的倍数

  综上:

    开启压缩占用字节: 8 + 4  = 12  , 因为Padding对齐,  12 + 4 = 16

    不开启压缩占用字节: 8 + 8 = 16, 不需要padding对齐

  结论:

    Object o = new Object();占用16字节。

 

posted @   无虑的小猪  阅读(372)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示