new一个对象怎样计算它用了多少内存 新建一个对象怎样计算它用了多少内存? 域成员的空间?静态块里的内容?构造方法里的内容? 请指教了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 .... ....个人感觉很难。jvm中每个对象都不是独立存在的,无法像c中那样得到每个struct的大小。 空对象占8个字节有数据成员的话,你把数据成员按基本数据类型和对象引用分开统计。基本数据类型按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个字节如果你是从别的类继承的,父类的也要算上。 你可以new两个对象,放到栈里同,在debug下得到两个对象在内存中的地址,然后相减就可以了 基本是没法得到的不同的jvm实现对方法区以及对象的表现形式都是自己定义的,jvm spec没有做特别的规定再者,每个对象和类都有一个锁信息,有的jvm实现在new对象的时候就分配内存,有的jvm实现在用到锁的时候才分配锁所占的内存对于不同的gc实现,也可能在对象中增加一些信息所以这个内存的占用是得不到的,也是没必要的 这个纯属扯淡,jvm中boolean是用int来表示的,java对象可以用c的结构体来表示,但也用其他方式来表示 呃,楼主为什么需要知道对象的大小呢?个人觉得,我们应该做的是学习如何写优质的代码去利用好内存空间和避免内存溢出,甚至可以是GC算法的调优、虚拟机的内存分配调优等等,我觉得太底层的技术和实现不是Java的优势和重心所在。JVM规范没有限定对象在内存中的表示形式的,堆、栈、和方法区都没有限定的实现形式,不同的JVM不同。 是不是和NEW 的对象大小也有关呢??????请教 不同的jvm实现可以有不同的存储方法,jvm规范没有定义 JVM控制了程序员访问系统内存的入口,基本无法统计java对象所占内存大小。6L的说的C/C++的策略,java不适合 使用 Java 5 后新增的 InstrumentationInstrumentation: querying the memory usage of a Java object new出来的空间在堆内存中,用完就回收的 反射中的"立即封闭构造方法" 关于Applet中键盘事件的问题 在线等,socket通信! 多线程的设置讨论(讨论想法) TOMCAT的问题 大家都来看一下这个小程序吧! 为什么我还是运行不了我编译的class文件 为什么我用httpclient的时候,经常出现ProtocolException,Connection ,IOException错误!!! 关于在JAVA中使用数据连接的问题 请问如何让浏览器自动安装指定的某一个插件 新学java菜鸟,求大神帮忙! 请求大牛们解决换行问题
有数据成员的话,你把数据成员按基本数据类型和对象引用分开统计。
基本数据类型按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个字节
如果你是从别的类继承的,父类的也要算上。
所以这个内存的占用是得不到的,也是没必要的
JVM规范没有限定对象在内存中的表示形式的,堆、栈、和方法区都没有限定的实现形式,不同的JVM不同。
6L的说的C/C++的策略,java不适合
Instrumentation: querying the memory usage of a Java object