Java对象的创建和内存大小

发布于 2024-08-17 15:18:03 字数 269 浏览 5 评论 0原文

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

我正在创建一个类

public class NewClass {

    NewClass() { }

}

考虑一下,当我使用 NewClass nc = new NewClass(); 创建 NewClass 的实例时, 。在堆中创建的 NewClass 的大小是多少?

〜杰根

I am trying understand about the size that a Java object will be allocated with when created using a new operator.

Consider that i am creating a class

public class NewClass {

    NewClass() { }

}

when i create an instance of NewClass using NewClass nc = new NewClass();. what is the size of the NewClass that gets created in the heap?

~ Jegan

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

殊姿 2024-08-24 15:18:03

分析是最好的方法,但您可以像这样获得一个很好的估计:

每个对象 8 个字节(裸开销),加上字段。

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

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

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

Profiling is the best way, but you can get a good estimate like so:

8 bytes per object (bare overhead), plus fields.

  • Primitive Fields: as listed in Java. Note: booleans need 1 full byte.
  • Object fields: 1 pointer (4 bytes on 32-bit VM, 8 on 64-bit), plus size of object itself (if not a reference to a preexisting object)
  • Arrays: 4 bytes + object/primitives for elements
  • Strings: far, far too much. IIRC, 24 bytes + 2 bytes/character. Might be more.

The final result is increased to the nearest multiple of 8 bytes.

See also my example here for how to calculate memory use on a more complex object. Note: these rules may vary with VMs, and may change as newer versions of the VM come out. My estimate only applies to the Sun JVM, although I suspect IBM's results will be similar.

内心激荡 2024-08-24 15:18:03

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

I think you need to use a profiler to measure this. You may use JProfiler or YourKit profilers for this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文