如何在Java中计算对象数组的内存(字节)

如何在Java中计算对象数组的内存(字节),java,arrays,object,memory,memory-management,Java,Arrays,Object,Memory,Memory Management,问题是: 考虑一个数据类型Planet,其属性为String name和int moons。内存占用量是多少 以以下方式创建和初始化的Planet对象的数组planets Planet [] planets = new Planet [8]; planets [0] = new Planet (" Mercury ", 0); planets [1] = new Planet (" Venus ", 0); planets [2] = new Planet (" Earth ", 1); pla

问题是:

考虑一个数据类型
Planet
,其属性为
String name
int moons
。内存占用量是多少 以以下方式创建和初始化的
Planet
对象的数组
planets

Planet [] planets = new Planet [8];
planets [0] = new Planet (" Mercury ", 0);
planets [1] = new Planet (" Venus ", 0);
planets [2] = new Planet (" Earth ", 1);
planets [3] = new Planet (" Mars " , 2);
planets [4] = new Planet (" Jupiter ", 67);
planets [5] = new Planet (" Saturn ", 62);
planets [6] = new Planet (" Uranus ", 27);
planets [7] = new Planet (" Neptune ", 14);
它在我的学习指南上给我的答案是:

24+8×32+56+2×(7+5+5+4+7+6+6+7)=430字节


有人能给我解释一下,所有这些值是如何在开销和对象的特定内存占用方面结合在一起的吗

那么,你认为他们来自哪里?(请注意,7、5、5、4等对于您放在那里的字符串是错误的)。但是,我们也不知道
Planet
类的定义,因此无法确定它占用了多少内存。很难可靠地计算内存占用,因为它可能因JVM和配置而异。我用我自己的估算方法得到了712字节。如果你的研究指南问这个问题,那么它已经解释了对象开销和数组开销,所以也许你只需要(重新)阅读指南,你就会找到答案。我被告知“每个行星对象占用32字节(16字节的开销+8字节的字符串名+4字节的int-moon计数+4字节的填充)。“那么,你认为它们来自哪里?(注意,7、5、5、4等对于你放在那里的字符串是错误的)。但是,我们也不知道
Planet
类的定义,因此无法确定它占用了多少内存。很难可靠地计算内存占用,因为它可能因JVM和配置而异。我用自己的估计方法得到了712字节。如果您的学习指南问这个问题,那么它已经解释了有关对象的内容开销和数组开销,所以也许你只需要(重新)阅读指南,你就会找到答案。我被告知“每个行星对象占用32字节(16字节开销+8字节字符串名+4字节整数月亮计数+4字节填充)。”