java - Java中对象的内存开销是多少?

标签 java memory overhead

复制:

What is the memory consumption of an object in Java?

假设在 Intel 或 AMD 机器上的 64 位 Linux 上的 Java 1.6 JVM,创建一个简单的对象使用多少字节的内存开销?例如,二维数组中的每一行都是一个单独的对象。如果我的数组很大,我将使用多少 RAM?

最佳答案

这取决于您使用的 JVM。

假设您没有使用带有压缩指针的 JVM,该数组将消耗:

  • 类型指针为 8 个字节。
  • 数组长度为 4 个字节。
  • 数组中的每个元素都有 8 个字节(这些是指向实际对象的指针)。
  • 总和:8+4+len*8 字节
  • 对于带有压缩指针的 JVM:4+4+len*4 字节

然后,您在数组中存储(引用)的实际对象将消耗内存,具体取决于它们是什么类型的对象。 java.lang.Object 只包含一个指向该类的指针,因此是 8 个字节,如果使用压缩指针则为 4 个字节。

对于您自己的类,您可以通过查看类中的字段来计算内存使用量。 每个引用将消耗 8 个字节(压缩指针为 4 个字节)。每个 long 8 个字节,int 4 个字节,char/short 2 个字节,byte/boolean 1 个字节。但所有这些都将对齐到一个偶数的总大小,即 4 或 8 字节的倍数,具体取决于您使用的 JVM。

关于java - Java中对象的内存开销是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/726404/

相关文章:

java - 如何在 spring @feignclient 配置中设置自定义最大连接池大小

java - 如何改进应用程序以避免堆空间问题

c++ - 测试虚函数的开销

c - 结构对字体大小的贡献

java - OOP 设计 - 创建策略/模式

java - 使用 JAXB 获取 XML 签名的最佳方法

matlab - 使用 interp1 时内存不足。软件

c++ - 快速叉积。函数调用开销?

Java BoxLayout 返回错误 BoxLayout 无法共享

memory - 地址间隔标识符 (ASID) 的用途