JVM 对象的内存布局

  • 对象头

    • ++Mark word 标记字段++

      • 用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等
    • ++ClassPoint 类型指针++

      • 对象指向它的类型元数据的指针,Java虚拟机通过这个指针 来确定该对象是哪个类的实例
    • ++数组长度++

      • 如果对 象是一个Java数组,那在对象头中还必须有一块用于记录数组长度的数据,因为虚拟机可以通过普通 Java对象的元数据信息确定Java对象的大小,但是如果数组的长度是不确定的,将无法通过元数据中的 信息推断出数组的大小。
  • 实例数据

    对象真正存储的有效信息

  • 对齐填充

    不是必然存在的,也没有特别的含义,它仅仅起着占位符的作 用。

    由于HotSpot虚拟机的自动内存管理系统要求对象起始地址必须是8字节的整数倍,换句话说就是 任何对象的大小都必须是8字节的整数倍。对象头部分已经被精心设计成正好是8字节的倍数(1倍或者 2倍)。因此,如果对象实例数据部分没有对齐的话,就需要通过对齐填充来补全。

相关推荐
l软件定制开发工作室2 分钟前
Spring开发系列教程(37)——使用Conditional
java·后端·spring
代码漫谈4 分钟前
Spring Boot日志配置全攻略:打造高效、可靠的日志系统
java·spring boot·log4j·日志
c++之路6 分钟前
单例模式(Singleton Pattern)
开发语言·c++·单例模式
m0_591364737 分钟前
CSS 背景图滑动切换:纯 CSS 实现右进左出轮播效果
jvm·数据库·python
ideal-cs7 分钟前
总结:生产环境Release、Snapshot两种包版本该如何管理与发布构建
java·maven·snapshot·release
yangminlei8 分钟前
Spring Boot Starter自定义开发 构建企业级组件库
java·spring boot·后端
2401_824222698 分钟前
Python测试代码如何实现自解释_使用pytest描述性命名规范
jvm·数据库·python
牛奶咖啡138 分钟前
CI/CD——在jenkins中构建流程实现springboot项目的自动化构建与部署
java·ci/cd·k8s·jenkins·springboot·springboot制作镜像·使用源码项目制作镜像
桔筐9 分钟前
Redis 无锁化库存扣减方案(INCR + SETNX 实现,高并发不超卖)
java·redis
woxihuan12345610 分钟前
MySQL 中高效存储与查询时间数据的最佳实践
jvm·数据库·python