【问题标题】:Direct operations on off-heap arrays堆外数组的直接操作
【发布时间】:2016-11-10 00:46:58
【问题描述】:

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

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

【问题讨论】:

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

标签: java scala jvm


【解决方案1】:

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

如果您只需要访问原始类型,那么字节缓冲区目前是为堆上和堆外访问提供相同 API 的抽象,但您必须一一提取字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 2017-02-18
    • 2023-03-09
    • 1970-01-01
    • 2022-11-22
    相关资源
    最近更新 更多