java树的23个节点浪费了什么信息? 4 月 Questions & Answers 54 假设我有一个2-3树的节点类。每个节点可以存储2个数据元素,最多可以存储3个子节点。如果树中有一个节点,则存储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,但这取决于操作系统) 因此,用于存储data1和data2的内存完全相同。当然data1指向一个有效地址,还有一个对象也需要内存 那么,当对象被创建时,会发生什么呢? 让我们假设对象是在堆栈上创建的(在堆上它将完全相同)。VM在堆栈上逐个“推送”每个属性。我不确定确切的顺序,但我假设是从上到下的data1, data2, child1,...。在这种情况下,保留5倍32位或64位(取决于您的体系结构)。我就叫他们单词,我记不起正确的表达方式了。每个单词的值现在是一个随机值(存储在这些存储单元中的值)。接下来为每个单词添加正确的值,因此null0x00000000被写入存储单元。对于data1搜索一个空闲地址,然后在那里重新开始 我希望我想说的很清楚
# 1 楼答案
这取决于要存储在树中的数据。 假设您希望在树中存储对象、字符串或其他复杂数据类型。然后,您有两个指针(一个用于永久对象)和三个用于子对象的指针。即使指针未初始化/指向
null
,节点也需要空间。因此,内存使用率为1/5例如:
图像您拥有以下类:
创建此类对象时,VM需要为新对象保留内存。因此VM知道这个类中有5个不同的属性。每个属性都是一个对象,因此需要为5个指针留出空间。指针实际指向的位置并不重要,因为它只是指针中的值。
null
指针只是指向无效地址的指针(例如0x00000000
,但这取决于操作系统)因此,用于存储
data1
和data2
的内存完全相同。当然data1
指向一个有效地址,还有一个对象也需要内存那么,当对象被创建时,会发生什么呢? 让我们假设对象是在堆栈上创建的(在堆上它将完全相同)。VM在堆栈上逐个“推送”每个属性。我不确定确切的顺序,但我假设是从上到下的
data1, data2, child1,...
。在这种情况下,保留5倍32位或64位(取决于您的体系结构)。我就叫他们单词,我记不起正确的表达方式了。每个单词的值现在是一个随机值(存储在这些存储单元中的值)。接下来为每个单词添加正确的值,因此null
0x00000000
被写入存储单元。对于data1
搜索一个空闲地址,然后在那里重新开始我希望我想说的很清楚