导航:首页 > 编程语言 > java对象的长度

java对象的长度

发布时间:2024-09-07 13:47:37

① 怎么确定java对象的大小

普通对象的结构如下,按64位机器的长度计算
1. 对象头(_mark), 8个字节

2. Oop指针,如果是32G内存以下的,默认开启对象指针压缩,4个字节
3. 数据区
4.Padding(内存对齐),按照8的倍数对齐

数组对象结构是
1. 对象头(_mark), 8个字节

2. Oop指针,如果是32G内存以下的,默认开启对象指针压缩,4个字节
3. 数组长度,4个字节
4. 数据区

5. Padding(内存对齐),按照8的倍数对齐

清楚了对象在内存的基本布局后,咱们说两种计算Java对象大小的方法
1. 通过java.lang.instrument.Instrumentation的getObjectSize(obj)直接获取对象的大小

2. 通过sun.misc.Unsafe对象的objectFieldOffset(field)等方法结合反射来计算对象的大小

java.lang.instrument.Instrumentation.getObjectSize()的方式

先讲讲java.lang.instrument.Instrumentation.getObjectSize()的方式,这种方法得到的是Shallow Size,即遇到引用时,只计算引用的长度,不计算所引用的对象的实际大小。如果要计算所引用对象的实际大小,可以通过递归的方式去计算。
java.lang.instrument.Instrumentation的实例必须通过指定javaagent的方式才能获得,具体的步骤如下:
1. 定义一个类,提供一个premain方法: public static void premain(String agentArgs, Instrumentation instP)
2. 创建META-INF/MANIFEST.MF文件,内容是指定PreMain的类是哪个: Premain-Class: sizeof.ObjectShallowSize
3. 把这个类打成jar,然后用java -javaagent XXXX.jar XXX.main的方式执行

有兴趣可以看下博主的:http://blog.csdn.net/iter_zc/article/details/41822719

阅读全文

与java对象的长度相关的资料

热点内容
linux电脑如何连接服务器地址 浏览:955
阿里域名邮箱pop服务器地址 浏览:852
李白pdf 浏览:782
pdfmax 浏览:223
跑步紧身裤压缩裤 浏览:215
郑州金水房价查询app哪个好 浏览:575
房地产开发流程pdf 浏览:243
小鹏p7能耗APP怎么查 浏览:243
如何代挂服务器 浏览:282
安卓机拍视频时怎么当背景音乐 浏览:879
方舟编译器华为p20pro更新 浏览:30
php程序漏洞 浏览:552
手机app怎么转过去 浏览:233
新建文件夹标记 浏览:486
两处收入个税App上怎么申报 浏览:674
hive创建数据库命令 浏览:840
服务器在台湾怎么加速 浏览:706
linuxparted磁盘分区命令 浏览:140
pdf缺点 浏览:839
kalilinuxu盘制作 浏览:926