JAVA对象之对象头 ✨ 每日积累

简介: JAVA对象之对象头 ✨ 每日积累

java对象头学习

术语参考:http://openjdk.java.net/groups/hotspot/docs/HotSpotGlossary.html

JVM中,对象在内存中的布局分为三块区域:对象头、实例数据和对齐填充。如下图所示:

1.png

_mark表示对象标记、属于markOop类型,它记录了对象和锁有关的信息;
Klass表示普通指针;
_compressed_klass表示压缩类指针。


Mark Word

Mark Word用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等等,占用内存大小与虚拟机位长一致。


Klass pointer

64位虚拟机则其Klass pointer的大小为64位; 一般来说虚拟机都会开启指针压缩;即也就是说在64位虚拟机情况下其Klass pointer也会被压缩成32位;


一些特殊类型的指针JVM不会优化,

比如执行PermGen的Class对象指针(JDK8中指向元空间的Class对象指针)、本地变量、堆栈元素、入参、返回值和NULL指针等。


对象头 = Mark Word + 类型指针(未开启指针压缩的情况下)

在64位系统中,Mark Word = 8 bytes, 类型指针 = 8bytes, 对象头 = 16bytes = 128 bits;


实例数据

实例数据:对象实例数据(堆):对象中各个实例字段的数据
##下面作为额外的知识
对象类型数据(方法区):对象的类型、父类、实现的接口、方法等
静态区(也在方法区中)用来存放静态变量,静态块


对齐填充

对齐填充并不是必然存在的,占位符的作用。由于HotSpot VM的自动内存管理系统 要求对象起始地址必须是8字节的整数倍。换句话说,就是对象的大小必须是8字节的整数倍。而对象头正好是8字节的整数倍,因此,当对象实例数据没有对齐时,就需要通过对齐填充来补全。


再64为虚拟机中运行时其存储结构如下:

1.png

相关文章
|
10天前
|
Java 编译器
<Java> 类和对象专题大汇总.(学不会包退)
<Java> 类和对象专题大汇总
21 0
|
1天前
|
Java
Java list中的对象转为list,list中的对象转为map
Java list中的对象转为list,list中的对象转为map
|
2天前
|
存储 缓存 安全
Java性能优化(二):Java基础-String对象及其性能优化
在深入探讨了String字符串的性能优化后,我们认识到优化字符串处理对提升系统整体性能的重要性。Java在版本迭代中,通过精心调整成员变量和内存管理机制,不断对String对象进行优化,以更高效地使用内存资源。String对象的不可变性是Java语言设计中的一个关键特性,它不仅确保了字符串的安全性,也为字符串常量池的实现提供了基础。通过减少相同值的字符串对象的重复创建,常量池有效地节约了内存空间。然而,不可变性也带来了挑战。在处理长字符串拼接时,我们需要显式使用类来避免性能下降。
10 1
|
3天前
|
Java 测试技术 数据库
Java一分钟之-Mockito:模拟对象测试
【6月更文挑战第4天】Mockito是Java单元测试中的模拟框架,用于创建和配置模拟对象以隔离测试代码。核心概念包括:模拟对象、预期行为(定义方法调用响应)、验证(检查方法调用)和捕获参数。常见问题包括过度模拟、忽略未使用的模拟调用、不恰当配置和误用Mockito注解。解决方案包括正确选择模拟对象、验证所有交互、仔细配置模拟行为及在测试类中正确使用Mockito注解。提供的代码示例展示了如何使用Mockito模拟和验证方法调用,以实现独立且准确的测试。学习和避免这些易错点可提升测试效率和代码质量。
14 0
Java一分钟之-Mockito:模拟对象测试
|
3天前
|
Java 编译器 C语言
18. 【Java教程】类和对象
18. 【Java教程】类和对象
8 1
|
5天前
|
XML Java 数据格式
Java一分钟之-JAXB:Java对象到XML绑定
【6月更文挑战第1天】Java Architecture for XML Binding (JAXB) 是Java平台标准,用于自动转换Java对象和XML。它通过注解实现声明式映射,简化XML处理。本文介绍了JAXB的基本使用、常见问题和最佳实践,包括对象到XML(Marshalling)和XML到对象(Unmarshalling)过程,并通过示例展示如何在Java类和XML之间进行转换。注意类型匹配、注解冲突和JAXB上下文创建等问题,以及如何优化性能和避免循环引用。
11 3
|
6天前
|
存储 Java
Java语言中的类与对象:深入理解与实践
Java语言中的类与对象:深入理解与实践
|
6天前
|
存储 Java
Java类与对象的技术性文章
Java类与对象的技术性文章
24 0
|
7天前
|
Java
类与对象:Java面向对象编程的基石
类与对象:Java面向对象编程的基石
|
7天前
|
存储 Java API
Java的匿名对象
Java的匿名对象