Java 堆外阵列上的直接操作

Java 堆外阵列上的直接操作,java,scala,jvm,Java,Scala,Jvm,最近,我一直在寻找一种方法,将大量数据存储在内存中,用于科学计算。我已经看过了。我注意到的一件事是,如果我有一个在本机Java数组上运行的现有函数,我就不能直接在堆外数组上应用它;这两个库都需要从堆外阵列复制到普通阵列 我不知道这是内存模型的真正限制,还是库API施加的限制。有可能获得堆外数组的Java数组“视图”吗?声称能够做到这一点,但这基本上是一个大问题,因为它违反了垃圾收集器的假设,并且依赖于特定的收集器在遇到这些违规行为时不会起火。对于生产应用来说,这可能不是一个好主意 如果您只需要访

最近,我一直在寻找一种方法,将大量数据存储在内存中,用于科学计算。我已经看过了。我注意到的一件事是,如果我有一个在本机Java数组上运行的现有函数,我就不能直接在堆外数组上应用它;这两个库都需要从堆外阵列复制到普通阵列

我不知道这是内存模型的真正限制,还是库API施加的限制。有可能获得堆外数组的Java数组“视图”吗?

声称能够做到这一点,但这基本上是一个大问题,因为它违反了垃圾收集器的假设,并且依赖于特定的收集器在遇到这些违规行为时不会起火。对于生产应用来说,这可能不是一个好主意


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

不,这是不可能的“堆外”和“Java数组”是矛盾的,正如Java堆一样,根据定义,所有Java对象的内存区域。由于这一形式方面没有直接的技术后果,问题就出现了,你想通过这种自相矛盾的愿望实现什么。到目前为止,您所说的只是希望“在内存中存储大量数据”。用堆做这个有什么不对?