【发布时间】:2018-11-26 22:41:00
【问题描述】:
我有一个大矩阵(大约 100x20.000.000)整数元素。我将其存储为列表的 ArrayList。不幸的是,Java 不喜欢这样,我得到了 OutOfMemoryError。
有没有在 Java 中存储大矩阵的好方法?
我习惯了pythons“导入库为你做这件事”。 java中是否有合适的库?
This post 不是我的问题的解决方案,因为在那篇文章中,用户试图存储字符串。解决方案是将字符串映射到整数,从而节省一些空间。我不能这样做。我只有一个大整数矩阵。
【问题讨论】:
-
您是否使用了该矩阵的所有值?如果是,您至少需要 4x50M=200MB 的 RAM 来存储原始矩阵数据。不是那么多。我认为只需设置 java 运行时参数,例如-Xmx2040m 应该修复 OutOfMemoryError
-
@zolv 谢谢你,我会试试的。
-
@csmckelvey 那么该帖子的建议是只使用数组而不是列表?我认为哈希映射对我来说是不可行的,因为它对范围没有限制,这意味着内容可以是任何随机整数
-
int使用 4 个字节,但Integer和引用每个使用大约 32 个字节。如果您遇到内存问题,请使用int[]而不是List<Integer> -
完整性检查:你有多少内存?在没有开销和压缩的情况下,存储这些数据本身会消耗 8 GB 的存储空间,而这是在您尝试对其进行任何实际操作之前。
标签: java python matrix out-of-memory