Tag: 大数据卷

STXXL等效于Java

我正在寻找一个专为Java中的大型数据集而设计的集合框架,这些数据集行为透明,就像STXXL为C ++做的那样。 它应该透明地交换到磁盘,但是比普通的基于操作系统的虚拟机交换更有效。 StringBuffer / String drop-in替换将是一个很大的优势。

使用大型数据结构时,避免Java(eclipse)中出现“内存不足错误”?

好吧,所以我正在编写一个程序,不幸的是需要使用庞大的数据结构来完成它的工作,但它在初始化期间失败了“内存不足错误”。 虽然我完全理解这意味着什么以及为什么它是一个问题,但我无法克服它,因为我的程序需要使用这个大型结构,我不知道任何其他方式来存储它。 该程序首先索引我提供的大量文本文件。 这很好用。 然后它使用此索引初始化大型2D数组。 该数组将具有n²个条目,其中“n”是文本语料库中唯一字的数量。 对于我正在测试的相对较小的块(大约60个文件),它需要制作大约30,000×30,000个条目。 一旦我在我的完整预期语料库上运行它,这可能会更大。 它在索引之后每次都会失败,同时它正在初始化数据结构(稍后要处理)。 我做的事情包括: 修改我的代码以使用原始int[]而不是TreeMap 消除冗余结构等… 另外,我用-Xmx2g运行程序以-Xmx2g我分配的内存 我相信这不是一个简单的代码解决方案,但很可能需要一种非常新的方法。 我正在寻找那种方法,任何想法? 谢谢,B。

从大表中检索所有记录时如何避免OOM(Out of memory)错误?

我有一个任务是将一个巨大的表转换为自定义XML文件。 我将使用Java来完成这项工作。 如果我只是发出“SELECT * FROM customer”,它可能会返回最终导致OOM的大量数据。 我想知道,有没有办法可以在记录可用后立即处理,并在sql检索过程中从内存中删除记录? —于2009年7月13日编辑 让我详细说明我的问题。 我有1个db服务器和1个应用服务器。 当我在应用程序中发出选择查询时,数据将从数据库服务器传输到应用服务器。 我相信(如果我错了,请纠正我)ResultSet需要等到接收到查询中的所有记录。 即使我们将获取大小设置为4,对于1000记录表,我们仍然最终在app服务器的堆内存中有1000条记录,这是正确的吗? 获取大小仅影响从/向数据库服务器的往返次数。 我的问题是,如何在它到达app服务器后立即开始处理该4个(或任何数字)记录,并将其丢弃以释放应用服务器中的内存?

有关处理大量数据的建议

所以我有一个“大”的数字数据的“非常大”的ASCII文件(一共几千兆字节),我的程序需要至少按顺序处理整个数据。 有关存储/加载数据的建议吗? 我曾想过将文件转换为二进制文件以使它们更小并加快加载速度。 我应该一次性将所有内容加载到内存中吗? 如果没有,是否打开了部分加载数据的好方法? 什么是与Java相关的效率提示?