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