使用大型数据结构时,避免在Java(eclipse)中出现“内存不足错误”?
作者:互联网
好的,因此我正在编写一个程序,不幸的是,该程序需要使用巨大的数据结构来完成其工作,但是在初始化过程中,它由于“内存不足错误”而失败.尽管我完全理解这意味着什么以及它为什么会产生问题,但是我很难克服它,因为我的程序需要使用这种大结构,而且我不知道其他任何存储方法.
该程序首先索引我提供的大量文本文件.这很好.
然后,它使用该索引来初始化大型2D数组.该数组将具有n²个条目,其中“ n”是文本语料库中唯一单词的数量.对于相对较小的块,我正在测试n(大约60个文件),它需要输入大约30,000×30,000条目.一旦我也用我的全部预期语料来运行它,它可能会更大.
它在初始化数据结构(以后将要处理)时,每次在索引后始终会失败.
我所做的事情包括:
>修改代码以使用原始int []代替TreeMap
>消除多余的结构,等等.
>另外,我已经使用-Xmx2g运行了程序,以最大化分配的内存
我相当有信心,这不会成为简单的代码解决方案,但很有可能需要一种非常新颖的方法.我在寻找那种方法,有什么想法吗?
谢谢,
B.
解决方法:
听起来(对于您使用数组的目的做一些假设)大多数条目将为0.如果是,则可以考虑使用sparse matrix表示形式.
如果确实有那么多条目(即使假设没有开销,您当前的数组在over 3 gigabytes already处),那么您将必须使用某种磁盘存储或惰性加载/卸载系统.
标签:large-data-volumes,java,eclipse,heap-memory,out-of-memory 来源: https://codeday.me/bug/20191012/1897393.html