如何在java中计算类的大小..?是c中的sizeof()的任何方法吗?

时间:2010-08-31 04:48:44

标签: java

  

可能重复:
  Is there any sizeof-like method in Java?

我想在运行时确定我的类的大小。在C中我这样做:

struct
{
int id;
char name[30];
} registry


void main()
{
int size = sizeof(registry);
}

我如何用Java做到这一点?

4 个答案:

答案 0 :(得分:1)

你做不到。 Java虚拟机不希望您知道它。

可能还有其他方法可以用这些信息做你真正想做的事。

答案 1 :(得分:1)

VM在内部存储变量等方面有所不同。大多数现代32位虚拟机都很相似。您可以估计类实例的浅层大小,如下所示:

sizeInBytes = C + 4 * (fieldCount)

其中C是常数。

这是因为通常所有字段都有一个字宽,在JVM内部通常仍然是4个字节。类的深度大小更难计算,但基本上你递归地添加每个引用对象的大小。对于布尔值和字节,数组的大小通常为1*arr.length个字节,对于字符和短路,2*arr.length,对于整数和浮点数,4*arr.length,对于双精度和长整数,8*arr.length

在运行时获得估算的最简单方法可能是在实例化类的对象时测量Runtime.freeMemory()的变化。当然,这些都不应该用于程序逻辑;只是为了JVM调整或好奇。

答案 2 :(得分:0)

查看ClassMexer,它只是新java.lang.instrument.Instrumentation接口的一个简单实现。只需按照相当简单的说明操作即可。

它可能过于干扰你的使用,因为它作为javaagent运行,但从你的例子它应该没问题。

答案 3 :(得分:0)

你可以得到一个估计,如果有困难,得到确切的数字。为什么有必要?