导航:首页 > 编程语言 > 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对象的长度相关的资料

热点内容
m代码编译 浏览:880
端口通信命令 浏览:896
什么app看球赛无延迟 浏览:737
命令行编辑器 浏览:228
android打谱 浏览:400
密室大逃脱在什么app里面是免费的 浏览:982
ecs云服务器ftp 浏览:626
邮绪生活app什么意思 浏览:469
如何知晓服务器是否更新完成 浏览:949
北票女程序员 浏览:463
战地2枪械解压 浏览:41
pdf复选框 浏览:343
linux用户监控 浏览:35
化妆教程编译 浏览:133
python分组键的形式 浏览:721
佛教造像pdf 浏览:664
医疗不良事件上报系统源码 浏览:754
手机云视频加密怎么关 浏览:74
北京文件夹加密多少钱 浏览:671
什么是车鉴定app 浏览:67