首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java:非常大的树?

java:非常大的树?
EN

Stack Overflow用户
提问于 2011-09-01 22:14:43
回答 5查看 3.2K关注 0票数 3

目标是建造非常大的树。我说的非常大,指的是几亿个节点,只有几个千兆字节。

问题是普通的数据结构有太多的开销。我不能拥有"node“对象和子”map“。我需要以非常紧凑的方式将其直接编码到内存中。

因此,我想知道是否有一些将整数作为键和值的树的内存高效实现,而不在内部使用对象,因此需要(4字节的键+4字节的值+4字节的子索引+几个字节的空闲散列空间=每个条目平均15个字节),这将允许我使用外部映射int<->键和int<->值来搜索树。

有没有人?

PS:在内部使用对象至少要多使用5倍的空间:8个引用+4个额外的散列空间+ 16个对象头+8个键引用+8个值引用+8个父引用+8个子引用+ (16 + x)子映射obj =每个条目近76+x个字节。(例如,我们的默认实现每个条目大约需要100个字节)

EN

回答 5

Stack Overflow用户

发布于 2011-09-01 22:20:23

这实际上不是Java特有的问题,而是一个更一般的概念。

试试这个:http://webdocs.cs.ualberta.ca/~holte/T26/tree-as-array.html

关键是使用基元数组,以避免对象开销。

票数 2
EN

Stack Overflow用户

发布于 2011-09-01 22:21:33

我不知道有什么具体的树实现可以做到这一点,但VTD-XML在内部使用带有指向缓冲区的指针的标记数组在内部表示XML树( DOM)。也许你可以从他们的解决方案中获得灵感?

票数 2
EN

Stack Overflow用户

发布于 2011-09-01 22:26:37

你可能会发现这个库可以帮助你达到你想要的效果--它是专门为将值存储为原语而设计的,并且在幕后做了一些字节码的破解,给人一种存储对象的错觉。在以下情况下使用它:

...您希望在内存中高效地存储大型数据集合。这个库可以极大地减少完整的GC时间,并减少内存消耗。

它没有特定的Tree集合,但它可能会做到这一点,这取决于您需要什么。

http://code.google.com/p/vanilla-java/wiki/HugeCollections

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7271632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档