在堆外数组上进行直接操作

时间:2016-11-10 00:46:59

标签: java scala jvm

最近,我一直在寻找一种方法,将大量数据存储在内存中,用于科学计算。我查看了scala-offheapLArray。我注意到的一件事是,如果我有一个在本机Java数组上运行的现有函数,我不能直接在堆外数组上应用它;两个库都需要从堆外数组到正常数组的副本。

我不知道这是对内存模型的真正限制,还是仅仅是库API所施加的限制。是否有可能获得一个Java数组" view"堆外数组?

1 个答案:

答案 0 :(得分:3)

jillegal声称能够做到这一点,但它基本上是一个大黑客,因为它违反了垃圾收集者的假设,而且它依赖于特定的收藏家在遭遇时不会起火违法行为。对于生产使用来说,这可能不是一个好主意。

如果您只需要访问基本类型,那么bytebuffers当前是为堆上和堆外访问提供相同API的抽象,但您必须逐个提取字段。