2016-02-02 24 views
1

我正在开发一个红黑树,并使用Eclipse内存分析工具来测量其节点占用的空间。当我用一个short替换int时,为什么Java对象的大小不会超过两个字节?

我注意到,当我更换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的分隔符,因为我期望布尔变量的颜色大小为1.请记住,属性选项卡中的第一个引用是指向RedBlackBST实例。

+0

您的意思是说这两个引用('left'和'right')占用的大小取决于被引用的对象的大小?我知道链接的问题或多或少会回答我的问题,但如果有人能够更彻底地解释(对于每个变量)为什么我的对象的大小总计为40和32,我将不胜感激。 – Panagiotis

+0

@ T.J。克罗德:删除你的评论,而不是回答我,只是因为你写的东西没有真正思考是不是很有礼貌,尤其是在将我的问题标记为重复之后... – Panagiotis

回答

1

由于您使用的JVM将对象大小调整为8而导致差异。因此,您可能在64位体系结构上使用Oracle的Hotspot。这是因为性能方面的原因。

相关问题