对象的内存布局
2020-07-21 16:57:51 36 举报
AI智能生成
对象的内存布局是对象在内存中存储的组织结构。它包括对象的成员变量、虚函数表指针和对齐填充等部分。成员变量按照其在类中定义的顺序依次存储,而虚函数表指针指向一个包含类中所有虚函数地址的表格。对齐填充用于确保对象的大小是某个特定字节数的倍数,以提高内存访问效率。对象的内存布局还受到编译器和操作系统的影响,不同的编译器和操作系统可能会有不同的内存布局规则。此外,对象的内存布局也与对象的类型有关,不同类型的对象可能具有不同的内存布局。总之,了解对象的内存布局有助于我们更好地理解程序的运行机制和优化性能。
作者其他创作
大纲/内容
对象头(Header)
包含两部分
运行时元数据(Mark Word)
哈希值(HashCode)
GC 分代年龄
锁状态标志
线程持有的锁
偏向线程ID
偏向时间戳
类型指针
指向类元数据(方法区的Class) ,确定该对象所属的类(注意:并不是所有的对象都保留着类型指针)
说明:如果是数组,还要记录数组长度
实例数据(Instance Data)
说明
他是对象真正存储的有效信息,包括程序代码中定义的各种类型的字段(包括从父类继承下来的和本身拥有的字段
规则
相同宽度的字段总是被分配到一起
父类中定义的变量会出现在子类之前
如果 CompactFields 参数为true(默认为true),子类的窄变量可能插入到父类变量的空隙
对齐填充(Padding)
不是必须的,也没有特别含义,仅仅起到占位符的作用
小结:图示
参照我画的图更容易理解
0 条评论
下一页