Java 对象的组成
在JVM中,每个对象都由三个部分组成:对象头、实例变量和对齐填充。
组成部分
在JVM中,每个对象都由三个部分组成:对象头、实例变量和对齐填充。
对象头
对象头是存储在每个Java对象之前的一段内存空间,用于存储对象的元数据信息,包括以下内容:
- Mark Word:标记字,用于存储锁相关信息、GC状态信息等。
- Class pointer:指向该对象所属类的指针,用于确定对象类型。
- 数组长度:如果该对象是数组,则用于存储数组长度。
对象头的大小取决于平台的位数以及压缩指针技术的使用情况等因素。
实例变量
实例变量是对象的成员变量,定义了该对象的属性。它们被存储在紧随对象头之后的内存空间中。实例变量的大小和类型取决于对象所属类中定义的成员变量。
对齐填充
为了保证对象的大小是8字节的倍数,JVM会在实例变量之后添加一些额外的字节,即对齐填充。这些额外的字节没有任何实际作用,只是为了满足内存对齐的要求。
对齐填充的大小取决于对象头和实例变量所占用的内存空间。
实际大小
总体来说,一个Java对象的实际大小有以下三个部分组成:
- 对象头的大小:在不同的JVM实现中,对象头的大小可能会有所不同。
- 实例变量的大小:该对象中定义的所有实例变量的大小。
- 对齐填充的大小:为了满足内存对齐的要求而添加的额外字节。
具体的实际大小取决于平台的位数、操作系统的类型以及JVM实现的不同等因素。
总结
JVM对象由对象头、实例变量和对齐填充三个部分组成。对象头用于存储对象的元数据信息;实例变量定义了该对象的属性;对齐填充用于保证对象大小是8字节的倍数。理解JVM对象的组成对于Java程序开发人员来说是非常重要的,可以帮助他们更好地管理内存资源,提高程序性能。
- 标题: Java 对象的组成
- 作者: Heer Liu
- 创建于: 2020-06-02 20:55:10
- 链接: https://blog.heer.love/posts/581a85f5/
- 版权声明 : 本文章采用 CC BY-NC-SA 4.0 进行许可。