Java对象创建、分配、布局、访问小析(HotSpot虚拟机)(二)

简介: 本文内容总结自周志明先生所编著的《深入理解Java虚拟机-JVM高级特性与最佳实践》此书的经典不必多说。本节内容是对象的内存布局。 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头、实例数据、对齐填充(Padding)。在32位虚拟机中对象头的大小是8个字节,在64位虚拟机中对象头的大小是16个字节, 如果开启压缩的话,对象头的大小是12个字节。对象头包含两部分的

本文内容总结自周志明先生所编著的《深入理解Java虚拟机-JVM高级特性与最佳实践》此书的经典不必多说。本节内容是对象的内存布局。

在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头、实例数据、对齐填充(Padding)。在32位虚拟机中对象头的大小是8个字节,在64位虚拟机中对象头的大小是16个字节, 如果开启压缩的话,对象头的大小是12个字节。对象头包含两部分的信息,一部分是对象自身的运行时数据,包含哈希码、GC分代年龄、锁状态信息、线程持有的锁、偏向线程ID、偏向时间戳等。另一部分的信息是类型指针。虚拟机可以通过这个来确定这个对象是哪个类的实例(但不是所有的虚拟机都必须在对象数据上保留类型指针,因为对象访问方式有使用句柄和直接指针两种方式)。如果对象是数据,则对象头中还有一部分数据用来记录数据长度。关于对象头信息的一些例子:

对象头的长度


Java对象头的存储结构(32位虚拟机


对象头的状态变化(32位虚拟机)


64位虚拟机


实例数据部分是对象真正存储的有效信息,也是在程序代码中所定义的各种类型的字段内容。对象中的字段存储顺序和在代码中写的顺序是不同的。在HotSpot虚拟机中,默认的分配策略是long/double、int/float、short/char、byte/boolean、oops(对象引用)。这些字段所占用的内存大小为:long / double - 8 bytes,int / float - 4 bytes,short / char - 2 bytes,byte/boolean - 1 bytes,reference type - 4 or 8 bytes。long/double要求8字节对齐。相同字宽的字段总是被分配到一起。

对齐填充不是必然存放的,它仅仅起着占位符的作用。HotSpot虚拟机的自动内存管理系统要求对象起始地址必须是8字节的整数倍,也就是对象的大小必须是8字节的整数倍。

内存布局大家可以参考这一篇文章:http://blog.csdn.net/lqp276/article/details/52190503


相关文章
|
7月前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
946 157
|
9月前
|
缓存 安全 Java
Java反射机制:动态操作类与对象
Java反射机制是运行时动态操作类与对象的强大工具,支持获取类信息、动态创建实例、调用方法、访问字段等。它在框架开发、依赖注入、动态代理等方面有广泛应用,但也存在性能开销和安全风险。本文详解反射核心API、实战案例及性能优化策略,助你掌握Java动态编程精髓。
|
9月前
|
存储 人工智能 JavaScript
Java从作用域到对象高级应用​
本内容详细讲解了JavaScript中的作用域类型(函数作用域、块作用域、全局作用域)、作用域链、垃圾回收机制、闭包、变量提升、函数参数、数组方法、内置构造函数、对象高级知识、原型链、对象赋值、深浅拷贝、递归、异常处理及this指向等内容,全面覆盖JS核心概念与编程技巧。
106 0
|
10月前
|
存储 Java
Java对象的内存布局
在HotSpot虚拟机中,Java对象的内存布局分为三部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。对象头包含Mark Word、Class对象指针及数组长度;实例数据存储对象的实际字段内容;对齐填充用于确保对象大小为8字节的整数倍。
199 0
|
存储 缓存 Java
《深入理解Java虚拟机》读书笔记
《深入理解Java虚拟机》是整个Java图书领域公认的经典著作和超级畅销书,全书共分为五大部分,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行了全面而深入的分析,深刻揭示了JVM的工作原理。本文就是读者对于本书阅读后的读书笔记,和大家一起分享。
3729 0
|
存储 运维 监控
《深入理解Java虚拟机》学习笔记
第2章 垃圾收集器与内存分配策略 1.Java虚拟机在执行java程序时会把它所管理的内存会分为若干个不同的数据区域, 这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是在以来用户线程的启动和结束而建立和销毁。
5240 0
|
8月前
|
Oracle 关系型数据库 虚拟化
在VMware的Win10虚拟机中安装使用ENSP
本文介绍了在Windows 10虚拟机上安装ENSP及相关软件的全过程,包括VirtualBox、WinPcap、Wireshark、VLC和ENSP的安装步骤,并提供图文演示,帮助用户顺利完成配置与测试。
2206 134
|
7月前
|
Linux 虚拟化 iOS开发
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
1667 0
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端