1

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

我注意到,当我用一个短变量替换用于保持树高度的 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。

整数1 整数2

使用 N 的缩写,树的随机节点的浅堆和保留堆是 32。

短1 短2

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

我也非常感谢关于其余变量的两个数字的解释。我很困惑这两个大小的堆都是 2 的分隔符,因为我希望布尔变量颜色的大小为 1。请记住,属性选项卡中的第一个 ref 是 RedBlackBST 实例。

4

1 回答 1

1

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

于 2016-02-02T09:13:40.250 回答