首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我使用Clojure时,堆空间用完了,我该怎么办?

当我使用Clojure时,堆空间用完了,我该怎么办?
EN

Stack Overflow用户
提问于 2013-12-16 01:16:49
回答 1查看 408关注 0票数 2

我在Clojure做数据分析。在此数据分析过程中,我正在与一个包含大约300 in数据的SQlite文件进行交互。有关此数据集的一些查询,如

(select crawls)

返回非常长的爬行信息列表。但是,针对较大列的其他查询给了我以下信息:

OutOfMemoryError Java堆空间org.sqlite.NativeDB.column_text (NativeDB.java:-2)

我可以用korma做一些简单的事情,比如:

代码语言:javascript
复制
(select authors)

如下所示:

代码语言:javascript
复制
=> (first (select stories))
OutOfMemoryError Java heap space  org.sqlite.NativeDB.column_text (NativeDB.java:-2)

有人知道我该怎么解决这个问题吗?这是我的第一个大型数据分析项目。

EN

回答 1

Stack Overflow用户

发布于 2013-12-16 01:24:15

查询应该返回一个延迟的结果,这样您就可以使用结果而不需要堆中的全部内容。如果您从repl中做了一个大的选择,隐式打印就可以一次完成整个延迟的seq,这样堆就用完了。

正确的处理方法是编写一个reduce (可能是一个map / doseq组合),它一次只处理一个结果,而不保留旧的元素。注意“抓着头”,也就是说,不要绑定懒散的seq的顶部元素,否则整个东西将被保存在堆中。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20602040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档