java - 对象的内存使用情况

标签 java object memory space

如果我有一个对象,并且想要粗略估计该对象的大小与其组件的大小相比,我可以这样做吗?

该对象有一个 int 字段和一个 float 字段。因此,该对象的空间使用量是对该对象的引用的大小 (8) 字节 + 两个原始值 16+16 的大小,这为我提供了 40 字节或所需的 25% 额外空间。

最佳答案

检查对象大致大小的一种方法是创建该对象的许多实例并检查前后的内存。为了获得更准确的数字,您可以使用特定的 JVM 参数:

-verbose:gc -XX:-UseTLAB
  • verbose:gc 确保在测量过程中不会发生 GC
  • -XX:-UseTLAB 要求 JVM 不要以 block 的形式分配内存(否则它会为了效率而这样做)。关闭该选项可以提供更准确、更稳定的结果。

然后,您可以在分配之前和之后调用 Runtime.getRuntime().freeMemory(); 来监视内存使用情况。

请注意,添加字段并不一定会增加内存使用量。例如,在热点 7 64 位上,一个对象在内存中占用 16 个字节,但向该对象添加一个 int 字段不会改变大小(即保存一个 int 的对象) code> 字段在该 JVM 上也是 16 字节)。这是由于内存对齐限制造成的。

关于java - 对象的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14830885/

相关文章:

java - 从启动的线程中收集返回值? [最新Java]

java - 如何将值添加到 List<Map<String, Object>> 中?

java - 为什么抽象类可以这样实例化?

r - R 中的一行 if 语句 - 第一个参数无效

OpenVZ VPS 中的 MongoDB

java - SetVisible(Boolean) 在 Java 中未定义。如何解决这个问题?

java - 从字符串中提取日期

javascript - 为什么 "this"不等于调用该函数的对象?

c - 无法使用 memcpy 从缓冲区中删除特定字节

c++ - 将 16 位整数复制到两字节数组