java - 当我将 int 替换为 Short 时,为什么 Java 对象的大小相差超过两个字节?

标签 java heap-dump eclipse-memory-analyzer

我正在开发一棵红黑树,并使用 Eclipse Memory Analyzer Tool 来测量其节点占用的空间。

我注意到,当我用 Short 变量替换用于保持树高度的 int 变量时,每个节点的保留堆从 40 下降到 32。

public class RedBlackBST {
  private static final boolean RED   = true;
  private static final boolean BLACK = false;

  private Node root;

public class Node {
  public int key;
  public Node left, right;
  private boolean color;
  private int N;
}

您可以在下图中看到此效果:

当 N 为 int(用于高度)时,树的随机节点的浅堆和保留堆为 40。

int1 int2

如果缩写为 N,则树的随机节点的浅堆和保留堆为 32。

short1 short2

我认为差异应该只有两个字节。为什么是8?

我也非常感谢对这两个数字有关其余变量的解释。我很困惑,两个大小堆的除数都是 2,因为我期望 boolean 变量颜色的大小为 1。请记住,属性选项卡中的第一个引用是 RedBlackBST 实例。

最佳答案

差异是由于您使用的 JVM 将对象大小调整为 8 造成的。因此您可能在 64 位架构上使用 Oracle 的 Hotspot。这样做是出于性能原因。

关于java - 当我将 int 替换为 Short 时,为什么 Java 对象的大小相差超过两个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35148989/

相关文章:

java - 优雅的对象层次结构

java - 如何以编程方式获取 jmap 直方图?

java - 如何分析大型堆转储?

java - 如何收集任何 java 进程的堆转储

android - 一个简单的 "Hello World"项目的 17.8 MiB 堆分配?

JavaFX MediaPlayer 不播放 JAR 文件中的 MP4 视频

java - 在 eclipse 中创建应用程序 : Error parsing XML: not well-formed (invalid token)

eclipse内存分析器打不开

Java HeapDumps 表明在 OutOfMemory 异常后使用的堆大小比实际堆定义小 30%

java - Pom.xml OpenHAB 中的生命周期配置未涵盖插件执行