有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java树的23个节点浪费了什么信息?

假设我有一个2-3树的节点类。每个节点可以存储2个数据元素,最多可以存储3个子节点。如果树中有一个节点,则存储1个数据元素,并且没有子节点。此节点浪费了多少存储空间


共 (1) 个答案

  1. # 1 楼答案

    这取决于要存储在树中的数据。 假设您希望在树中存储对象、字符串或其他复杂数据类型。然后,您有两个指针(一个用于永久对象)和三个用于子对象的指针。即使指针未初始化/指向null,节点也需要空间。因此,内存使用率为1/5

    例如:

    图像您拥有以下类:

    class Node {
        Object data1 = new Data();
        Object data2 = null;
        Node child1 = null;
        Node child2 = null;
        Node child3 = null;
    }
    

    创建此类对象时,VM需要为新对象保留内存。因此VM知道这个类中有5个不同的属性。每个属性都是一个对象,因此需要为5个指针留出空间。指针实际指向的位置并不重要,因为它只是指针中的值。null指针只是指向无效地址的指针(例如0x00000000,但这取决于操作系统)

    因此,用于存储data1data2的内存完全相同。当然data1指向一个有效地址,还有一个对象也需要内存

    那么,当对象被创建时,会发生什么呢? 让我们假设对象是在堆栈上创建的(在堆上它将完全相同)。VM在堆栈上逐个“推送”每个属性。我不确定确切的顺序,但我假设是从上到下的data1, data2, child1,...。在这种情况下,保留5倍32位或64位(取决于您的体系结构)。我就叫他们单词,我记不起正确的表达方式了。每个单词的值现在是一个随机值(存储在这些存储单元中的值)。接下来为每个单词添加正确的值,因此null0x00000000被写入存储单元。对于data1搜索一个空闲地址,然后在那里重新开始

    我希望我想说的很清楚