sizeof java对象

day*_*mer 5 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);  
Run Code Online (Sandbox Code Playgroud)

现在怎样才能知道人物对象的大小?

谢谢

sle*_*ske 9

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

Java中"大小"的概念只能在原语中得到合理定义:一个字节是8位(不足为奇)一个int是32位,一个long64位等等(参见http://download.oracle.com/javase/tutorial) /java/nutsandbolts/datatypes.html获取完整列表).

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

  • 对象实例可以(通常会)在内部包含对其他实例的引用,因此您必须决定是否计算这些依赖实例以及如何计算.如果多个实例共享依赖项怎么办?
  • 有时,对象实例可能会被重用(例如,实习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%

它仍然只是近似...