该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-09-08
最后修改:2010-09-08
Object o=new Object(); 4byte 8byte
4byte:是上面部分所说的java栈中保存引用的所需要的空间
由于Java中 所有非基本对象都默认继承Object对象,因此不论是什么样的java对象,大小大于8byte。
看看这个例子 Class MyObject{ int id; boolean flag; Object object; }
class BaseUser{ int id; long code; String name; } class Student extends BaseUser{ Date createTime; int grade; }
问上面BaseUser 和 Student 对象的大小?
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-09-08
写的挺不错的,但是提供计算对象大小的方法,就更好了
|
|
返回顶楼 | |
发表时间:2010-09-08
计算对象的大小啊 对象流 写到文件流写到硬盘 看大小
bytearrayoutputstream 字节数组的长度就是对象的大小 |
|
返回顶楼 | |
发表时间:2010-09-08
帅的被神砍 写道 在java中,一个空Object对象的大小是8byte
首先Java语言规范和Java虚拟机规范都明确的不指定对象的大小,只规定了存储原始类型数据的slot的最小宽度。笼统的讨论“在Java中”对象的大小是不合理的——这种讨论只能针对某个特定的JVM实现而言。 现在的Sun JDK中的JVM,HotSpot,采用的对象布局方式就与早期的Sun JDK(1.0/1.1时代)的截然不同,占用的空间也不一样多。 再看一篇2002年老文,Sensible Sanitation -- Understanding the IBM Java Garbage Collector, Part 1: Object allocation,这里描述的当时的IBM JVM中,Java对象的对象头在32位系统上占有4×3 = 12字节,在64位系统上占有8×3 = 24字节。 话说回来,现在的HotSpot在32位系统上确实是使用8字节的对象头,而所有平台上的JRockit也是采用8字节的对象头。64位的HotSpot的对象头大小要看情况,例如说看UseCompressedOops有没有开。 HotSpot中Java对象的布局还受到FieldsAllocationStyle与CompactFields这两个参数的控制,后者也会影响到一个Java对象实际占用的大小。 看,“Java对象的大小”对同一个JVM在不同平台上,甚至同一JVM在同一平台上不同的启动参数,都可能不同。 帅的被神砍 写道 注意区分java中的堆和栈,堆是存储时单位,而栈是运行时单位
这是什么来的…? 顶楼的文章描述的对32位HotSpot的默认配置是基本成立的,但对该JVM的非默认配置就不一定了,对64位HotSpot或者其它JVM实现更加是没保证。就不提高性能JVM通过逃逸分析直接把对象分配给干掉了的情况了。 zjhzjf000 写道 计算对象的大小啊 对象流 写到文件流写到硬盘 看大小
bytearrayoutputstream 字节数组的长度就是对象的大小 一个Java对象原本在内存中占的空间跟序列化后的占的空间可以完全没有关系。原因不用多解释吧。 |
|
返回顶楼 |
已被评为好帖!
|
浏览 3067 次