我正在开发一种文本分析程序,它将文档表示为某些预定义特征空间内的“特征计数”(例如,特定标记的出现)的数组。经过一些处理后,这些数组存储在ArrayList中。
我正在64 MB数据集上测试程序,有50,000条记录。该程序适用于小型数据集,但现在当我开始将数组加载到ArrayList对象(使用.add(double [])方法)时,它始终抛出“内存不足”的Java堆异常。根据我分配给堆栈的内存量,我将在ArrayList的第1000至第3000次添加此异常,远远低于我的50,000个条目。我清楚地知道,我无法将所有这些数据存储在RAM中并像往常一样对其进行操作。
但是,我不确定哪种数据结构最适合允许我访问和执行整个数据集的计算,只有部分数据结构可以加载到RAM中?
我在想将数据序列化到磁盘并将位置存储在RAM中的散列映射中会很有用。但是,我也看到了有关缓存和缓冲处理的讨论。
我100%肯定这是一个常见的CS问题,所以我确信有几种聪明的方法可以解决这个问题。任何指针将不胜感激: - )
答案 0 :(得分:2)
你有很多选择:
答案 1 :(得分:0)
如何使用Apache Spark(非常适合内存中的群集计算)?这有助于在数据集变大时扩展基础架构。