【发布时间】:2014-09-06 07:00:37
【问题描述】:
我们有 Java 程序,具有树结构、ArrayList 和 MultiMaps 的大对象。
我遇到的问题是,我们已经分配了 3GB 的堆内存,但它仍然没有空间。
我想知道这里是否有人可以建议一种将这些对象存储在堆外的方法,并根据每个处理调用的需要将数据块读回 java 程序。由于其他原因,我有兴趣将它们存储在文件中而不是数据库中。
我遇到了“内存映射文件”,有人在相关问题上建议“协议缓冲区”,目前这些对我来说是陌生的概念,想知道是否有简单的方法。我也找不到关于这两个概念的好例子。
非常感谢您对此提供的帮助。
性能是非常重要的考虑因素,我知道 JVM 堆分配,但我不希望增加 JVM 堆大小。
【问题讨论】:
-
听起来像是 XY 问题。认为我错了吗?提供有关“大对象”的详细信息以及您需要如何使用它们。向我们展示您为什么要探索像内存映射文件这样的奇特解决方案。
-
我已经用Java把数据放到了一个内存映射文件中,但是缺点是里面存储的数据不是Java对象——它只是看起来像一个大字节数组。
-
@Andreas,感谢您的回复。我们有我们读入 Java 的后端表数据,并根据一些逻辑将这些数据转换为 Java 数据结构 - 树数据结构、对象的 ArrayList 和 MultiMaps。我有 Java 逻辑,可以从这些对象和数据结构中读取数据,并根据他们的输入处理用户请求。如果还不清楚,我真的很抱歉。希望我能提供更多细节。我没有理由去寻求异国情调的解决方案。我会接受你的任何建议。
-
@antlersoft,人类不会读取文件内容。它将读取数据的同一 Java 程序。您能指导我在哪里可以找到更多详细信息和主要示例吗?
标签: java performance jvm protocol-buffers memory-mapped-files