Java对象的sizeof

我们如何找出Java对象的大小?

例:

class Person{

String name;

int age;

public Person(String n, int a){

name = n;

age = a;

}

}

Person person = new Person("Andy", 30);

现在我怎么知道人对象的大小?

谢谢

回答:

这个问题是没有意义的,至少没有没有进一步的背景。

Java中的“大小”概念仅针对基元进行了合理定义:一个字节为8位(毫不奇怪),一个字节int为32位,long64位,等等(请参见例如http://download.oracle.com/javase/tutorial

/java/nutsandbolts/datatypes.html以获得完整列表)。

对于对象实例,它更加复杂,因为:

  • 对象实例可以(并且通常会)在内部包含对其他实例的引用,因此您必须决定是否计算这些从属实例,以及如何计算。如果多个实例共享一个依赖关系怎么办?
  • 有时,对象实例可能会被重用(例如的Interning java.lang.String,请参阅http://en.wikipedia.org/wiki/String_interning)。因此,如果使用大小为y的x个对象,则总大小可能小于x * y
  • JVM在如何内部实现对象和实例方面有很多余地。它可能对不同的实例使用不同的技术(例如,共享内部数据结构),因此甚至可能没有有意义的“大小”可分配给单个对象。

也许您可以解释为什么对对象大小感兴趣。

估算实例使用的堆内存有一些经验法则(例如,在Sun JVM中,一个java.lang.Object实例使用8字节),但是这些将取决于您使用的JVM。

通常,如果您想了解堆的使用情况,请使用内存/堆分析器。

编辑:

好的,(从JDK

6开始)有一种方法可以近似估算对象使用的内存量:http

//download.oracle.com/javase/6/docs/api/java/lang/instrument/

Instrumentation.html#getObjectSize%28java.lang.Object%29

仍然只是一个近似值…

以上是 Java对象的sizeof 的全部内容, 来源链接: utcz.com/qa/418807.html

回到顶部