我正在开发一棵红黑树,并使用 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。
如果缩写为 N,则树的随机节点的浅堆和保留堆为 32。
我认为差异应该只有两个字节。为什么是8?
我也非常感谢对这两个数字有关其余变量的解释。我很困惑,两个大小堆的除数都是 2,因为我期望 boolean 变量颜色的大小为 1。请记住,属性选项卡中的第一个引用是 RedBlackBST 实例。
最佳答案
差异是由于您使用的 JVM 将对象大小调整为 8 造成的。因此您可能在 64 位架构上使用 Oracle 的 Hotspot。这样做是出于性能原因。
关于java - 当我将 int 替换为 Short 时,为什么 Java 对象的大小相差超过两个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35148989/