1

我试图了解使用new运算符创建 Java 对象时将分配的大小。

考虑到我正在创建一个类

public class NewClass {

    NewClass() { }

}

当我创建NewClassusing的实例时NewClass nc = new NewClass();NewClass在堆中创建的大小是多少?

~ 杰根

4

2 回答 2

9

分析是最好的方法,但你可以得到一个很好的估计,如下所示:

每个对象 8 个字节(无开销),外加字段。

  • 原始字段:如 Java 中所列。注意:布尔值需要 1 个完整字节。
  • 对象字段:1 个指针(在 32 位 VM 上为 4 个字节,在 64 位上为 8 个字节),加上对象本身的大小(如果不是对预先存在的对象的引用)
  • 数组:4 个字节 + 元素的对象/基元
  • 弦乐:远,太多了。IIRC,24 字节 + 2 字节/字符。可能更多。

最终结果增加到最接近的 8 个字节的倍数。

有关如何计算更复杂对象的内存使用情况,请参见我的示例。注意:这些规则可能因虚拟机而异,并且可能会随着新版本的虚拟机的出现而改变。我的估计仅适用于 Sun JVM,尽管我怀疑 IBM 的结果会相似。

于 2010-01-14T06:44:09.303 回答
0

我认为您需要使用分析器来衡量这一点。您可以为此使用JProfilerYourKit分析器。

于 2010-01-14T06:31:21.750 回答