当前位置: 首页 > news >正文

厦门百度搜索网站排名柳州建网站

厦门百度搜索网站排名,柳州建网站,北京网页设计公司兴田德润可信赖,wordpress付费下载插件Java对象内存结构详解 Java对象在JVM内存中的存储结构可以分为三个部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。以下是64位JVM(开启压缩指针)下…

Java对象内存结构详解

Java对象在JVM内存中的存储结构可以分为三个部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。以下是64位JVM(开启压缩指针)下的典型布局:
在这里插入图片描述

1. 对象头(Header)

对象头包含运行时元数据和控制信息,占12字节(压缩指针)或16字节(未压缩)

(1) Mark Word(8字节)

存储对象自身的运行时数据,内容会随锁状态变化:

锁状态存储内容
无锁哈希码(31bit) + 分代年龄(4bit) + 偏向模式(1bit) + 锁标志(2bit)
偏向锁线程ID(54bit) + Epoch(2bit) + 分代年龄(4bit) + 偏向模式(1bit) + 锁标志(2bit)
轻量级锁指向栈中锁记录的指针(62bit) + 锁标志(2bit)
重量级锁指向监视器(Monitor)的指针(62bit) + 锁标志(2bit)
GC标记空(用于垃圾回收标记)

(2) Klass Pointer(4字节)

指向方法区中的类元数据的指针(开启压缩指针时为4字节,否则8字节)

(3) 数组长度(可选,4字节)

如果是数组对象,额外存储数组长度

2. 实例数据(Instance Data)

存储对象真正的有效信息,即各个字段的内容,排列顺序受以下规则影响:

  1. 基本类型优先(long/double → int/float → short/char → byte/boolean)
  2. 相同宽度字段放在一起
  3. 父类字段在子类之前

字段内存占用

类型大小
boolean1字节
byte1字节
short2字节
char2字节
int4字节
float4字节
long8字节
double8字节
引用类型4字节(压缩指针)或8字节

示例:

class MyObject {byte b;      // 1字节int i;       // 4字节long l;      // 8字节Object ref;  // 4字节(压缩指针)
}
// 实例数据总大小 = 1 + 4 + 8 + 4 = 17字节

3. 对齐填充(Padding)

JVM要求对象起始地址必须是8字节的整数倍,因此可能需要填充字节(0-7字节)

示例计算

对象头:12字节 (MarkWord 8 + KlassPointer 4)
实例数据:17字节
总计:12 + 17 = 29字节
需要填充到32字节(8的倍数)
最终对象大小:32字节

4. 完整对象内存布局示例

[对象头][Mark Word(8字节)] 0x00000001d83eb950[Klass Pointer(4字节)] 0x0000000100000000[数组长度(4字节)] 0x00000005 (仅数组对象有)
[实例数据][int id(4字节)] 0x00000001[String name(4字节)] 0x000000076bdc8c18[double price(8字节)] 0x4024000000000000
[对齐填充(4字节)] 0x00000000

5. 查看对象内存布局的方法

(1) 使用JOL工具

// 添加依赖
<dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-core</artifactId><version>0.16</version>
</dependency>// 打印对象布局
System.out.println(ClassLayout.parseInstance(obj).toPrintable());

(2) 示例输出

class com.example.MyObject object internals:
OFF  SZ               TYPE DESCRIPTION               VALUE0   8                    (object header: mark)     0x00000001d83eb9508   4                    (object header: class)    0x000000010000000012   4                int MyObject.id               116   8             double MyObject.price            10.024   4   java.lang.String MyObject.name             "test"28   4                    (object alignment gap)    
Instance size: 32 bytes

6. 对象结构优化技巧

  1. 字段重排序:手动排列字段可减少填充

    // 优化前:需要4字节填充
    class Bad {byte b;long l;int i;
    }
    // 优化后:无填充
    class Good {long l;int i;byte b;
    }
    
  2. 使用基本类型:避免包装类(Integer等)的内存开销

  3. 对象共享:对于不变对象可复用(如String池)

资料免费获取

http://www.dtcms.com/a/551111.html

相关文章:

  • 长葛网站建设容桂免费网站建设公司
  • 公司网站制作设计价格怎么看视频号的网址
  • 已有网站开发app终端网站开发建设合同范本
  • 网站建设哪些模板号建筑工程网络教育自我鉴定
  • Polarctf swp
  • 东莞南城做网站推广的公司49you网页游戏平台
  • 打鱼跟电子游戏网站怎么做企业网站建设兴田德润很赞
  • 国外主流媒体网站三个律师做网站合适吗
  • 后台网站更新 网站没显示一级 爰做片免费网站
  • Python栈帧沙箱逃逸
  • soho外贸建站内部网站的作用
  • 凡科网站建设的技巧企业网站管理系统源码
  • 网站建设包装策略网站app微信三合一
  • 软件工程与项目管理seo的中文意思是什么
  • 【大模型本地对话页面开发】
  • SAP SuccessFactors 发展历史详解
  • 深圳龙华汽车站附近有做网站建设的俄文淘宝网站建设
  • 男女做那个的视频网站酒店网站设计
  • SAP PP BOM批量创建功能分享
  • python字符串处理与正则表达式--之八
  • 吴堡网站建设费用阿里云免费网站建设
  • lyh教大前端
  • 重庆移动网站建设html代码翻译器
  • 摄影师网站html5注册wordpress发送邮件
  • 郑州做网站云极游戏推广吧
  • 查网站ip地址网页升级紧急通知狼人
  • 青岛百度网站排名优化做网站怎么切片
  • wap网站开发公司企业宣传片制作教程
  • 怎样免费建企业网站吗wordpress首页标题修改
  • seo整站优化费用宝塔为什么要安装Wordpress