带有ByteBuffer接口的Java中的Buddy内存分配器

时间:2014-01-10 08:37:14

标签: java memory-management

我想通过我编写的伙伴内存分配器系统管理一大块内存。我可以使用unsafe来分配一块内存并使用我的算法来管理它。我需要为这些块提供ByteBuffer接口,以便java NIO可以将它们用于网络代码。我不知道如果不在不安全的块顶部实现ByteBuffer接口的每个单独功能,我怎么能做到这一点。这似乎有点矫枉过正。

我能想到的一个选择是使用反射来获取字节缓冲区对象并改变它的私有容量和内存地址字段,并将其标记为直接,以便我可以捎带现有的实现。不知怎的,这似乎不起作用。

我还想过使用一个大的直接ByteBuffer然后代表它的块作为切片,它们的位置和容量字段都改变了。这似乎也行不通,因为像倒带这样的操作只会将位置设置回零。

有更好的方法吗?也许我只需要实现整个界面。

实现ByteBuffer接口的一般方法是什么?

1 个答案:

答案 0 :(得分:0)

对于任何一个好奇的人,我最终使用一个直接字节缓冲区来获取最初的内存块。为了表示其中的较小块,我复制了它并使用反射来更改容量和地址字段。这样我就可以使用现有的直接字节缓冲区实现。