Java对象的sizeof

Java对象的sizeof,第1张

Java对象的sizeof

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

Java中的“大小”概念仅针对基元进行了合理定义:一个字节为8位(毫不奇怪),一个字节

int
为32位,
long
64位,等等(请参见例如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

仍然只是一个近似值…



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5130414.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-17
下一篇2022-11-17

发表评论

登录后才能评论

评论列表(0条)

    保存