我正在通过EHCACHE
实现他们如何进行磁盘分配。
它首先将Element
序列化为Byte数组,而不是通过调用方法来调用空格:allocator.alloc(size)
WHERE size
是字节数组的大小。
此处allocator
是FileAllocationTree
的实例,所以我怀疑FileAllocationTree
如何从文件中分配一个空闲区域,我发现他们正在使用AATree
获取可用空间管理,因此他们如何隔离树中的空间。
修改
我会更具体地提出我的问题:想知道ehcache
如何通过类AATreeSet
实现的AA树管理自由空间
感谢。
答案 0 :(得分:0)
我们可以知道AA树是红黑树的简化形式(自平衡二元搜索树),请参阅Wikipedia。
红黑树需要考虑七种不同的形状才能正确平衡树。
,而
另一方面,AA树只需要考虑两个形状,因为严格要求只有正确的链接可以是红色。
在这里,我们需要使用自平衡二进制搜索树来管理我们的可用空间,帮助我们插入,删除和搜索(最大,最小和一些适当的)可用空间。
我相信没有特殊原因EHCACHE使用AA树集来管理自由空间。他们只需要一个自平衡的二叉搜索树,然后选择一个易于实现的搜索树。我们可能会看到FileAllocationTree和AATreeSet都有类似的方法,如“insert”,“delete”和“search”。
EHCACHE使用自平衡BST来充分利用其平均高性能的插入,删除和搜索功能,此BST的每个节点代表一系列可用空间,节点的值代表免费空间的大小空间即可。然而,我没有统计数据来证明这种高性能。我相信它可能比散列表(在上/下限搜索上)和本机二叉树(在自我平衡上)更好。
顺便说一句,自平衡二进制搜索树用于管理内存空间,而B+ tree通常用于管理磁盘空间(文件系统和数据库),由于它的高扇出和廉价的迭代迭代。