100 分求助 ! 在JAVA 中如何获取一个对象占用的实际内存大小?
解决方案 »
- 怎么用system.in来读取多个数值
- java与oracle的问题
- <forward name 和 path 分别表示什么意思
- 在项目中怎样设计权限,怎样设计最好,什么方法最普遍
- 定时启动,response,request参数传递难题。(100分请教)
- !!!如何通过相对路径读取属性文件???
- 大家看看,这个错误是怎么回事儿?
- JB中用JDBtable和jdbtextfield显示oracle9i中的DATE字段,在编辑状态下JDBtable可以看到日期,但编译后就看不到了?!
- 再问一个基础问题,谢谢大家!!!!
- 长沙得csdn同聊在次聊聊,如何??
- 刚入门者的上机题,在异常方面有些问题,请大家指教
- 请java高手,来帮我解决一下这个问题!一定结帖.
MyObject obj=new MyOjbect();
long afterMemory=Runtime.getRuntime().totalMemory();
System.out.println("Memory used:"+(beforeMemory-afterMemory));
有数据成员的话,你按byte/boolean=1,char/short=2,int/float=4,long/double=8,对象引用=4累加,然后对齐到8个字节的倍数。
比如
class A{
int a;
char b;
}
占 8(基本)+8(int 4+char 2=6,对齐到8)= 16个字节
再比如:
class B{
Integer a;
long b;
byte c;
}
占 8(基本)+16(对象引用4+long8+byte1=13,对齐到16)= 32个字节===============
如果你是从别的类继承的,父类的也要算上。
你的还要减去那个LONG数据的空间,还有OBJ的Reference
有数据成员的话,你把数据成员按基本数据类型和对象引用分开统计。
基本数据类型按byte/boolean=1,char/short=2,int/float=4,long/double=8,累加,然后对齐到8的倍数。
对象引用按每个4字节,累加,然后对齐到8个字节的倍数。
=============
对象占用字节数=基本的8字节+基本数据类型所占的+对象引用所占的比如
class A{
int a;
char b;
}
占 8(基本)+8(int 4+char 2=6,对齐到8)= 16个字节
再比如:
class B{
Integer a;
long b;
byte c;
}
占 8(基本)+8(long4+byte1=5,对齐到8)+8(对象引用4,对齐到8)=32个字节===============
如果你是从别的类继承的,父类的也要算上。
class B{
Integer a;
long b;
byte c;
}
占 8(基本)+16(long8+byte1=9,对齐到16)+8(对象引用4,对齐到8)=32个字节
ByteArrayOutputStream bs = new ByteArrayOutputStream();
ObjectOutputStream os = new ObjectOutputStream(bs);
A a = new A();
os.writeObject(a);
os.flush();
System.out.println(bs.size());
对象序列化也不精确吧?如果有trasiant的属性怎么办?
还是像(hbwhwang(catmiw的ID已经停用,现在用这个) )这样算吧!
Runtime.getRuntime().freeMemory() /1024 );
有数据成员的话,你按byte/boolean=1,char/short=2,int/float=4,long/double=8,对象引用=4累加,然后对齐到8个字节的倍数。
比如
class A{
int a;
char b;
}
占 8(基本)+8(int 4+char 2=6,对齐到8)= 16个字节
再比如:
class B{
Integer a;
long b;
byte c;
}
占 8(基本)+16(对象引用4+long8+byte1=13,对齐到16)= 32个字节
是应该推出这个方法,实用着呢!
MyObject obj=new MyOjbect();
long afterMemory=Runtime.getRuntime().totalMemory();
System.out.println("Memory used:"+(beforeMemory-afterMemory));
在武汉?