我需要在 Java 中实现一个大的八叉树。树会很大,所以我需要使用分页机制,将树拆分成许多小文件,以便长期存储。
我担心的是 Java 对象的空间开销非常高。如果我使用 C,我将能够存储 8 个引用指针和任何其他数据,只需一个字节左右的开销来存储节点类型。
有什么方法可以在 Java 中处理这种级别的开销?
我很想每个文件只使用一个字节数组。然后我可以使用偏移量代替指针(这就是我计划存储文件的方式)。但是,即使限制了最大文件大小,这也很容易让我的数组太大而无法放入连续的内存中,尤其是在该内存变得严重碎片化的情况下。这也将导致添加新节点的大量时间开销,因为需要重新分配整个空间。ByteBuffer 可能会解决第一个问题(我不完全确定这一点),但是它不会解决第二个问题,因为 ByteBuffer 的大小是静态的。
目前我只会坚持使用节点对象。如果有人知道更节省空间且时间成本更低的解决方案,请告诉我。