【发布时间】:2013-04-18 04:08:17
【问题描述】:
math.combinatorics 的文档指出所有函数都返回惰性序列。
但是,如果我尝试使用大量数据运行 subsets,
(last (combinatorics/subsets (range 20)))
;OutOfMemoryError Java heap space clojure.lang.RT.cons (RT.java:559)
我收到 OutOfMemory 错误。
跑步
(last (range))
烧毁 CPU,但不返回错误。
Clojure 似乎不像 in this Stack Overflow question 解释的那样“抓住头”。
为什么会发生这种情况以及如何在子集中使用更大的范围?
更新
正如 cmets 建议的那样,它似乎可以在某些人的计算机上运行。所以我将发布我的系统配置
我运行 Mac (10.8.3) 并安装了 Clojure (1.5.1) 和 Homebrew。
我的 Java 版本是:
% java -version
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06-451-11M4406)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01-451, mixed mode)
我没有更改任何默认设置。我还通过删除 ~/.m2 文件夹重新安装了所有依赖项。
我的projects.clj。
我使用的命令是这样的
% lein repl
nREPL server started on port 61774
REPL-y 0.1.10
Clojure 1.5.1
=> (require 'clojure.math.combinatorics)
nil
=> (last (clojure.math.combinatorics/subsets (range 20)))
OutOfMemoryError Java heap space clojure.lang.RT.cons (RT.java:570)
or
OutOfMemoryError Java heap space clojure.math.combinatorics/index-combinations/fn--1148/step--1164 (combinatorics.clj:64)
我在同事的笔记本电脑上测试了这个问题,他也遇到了同样的问题,但他也在 Mac 上。
【问题讨论】:
-
工作正常,没有 OOM 错误。您使用的是哪个 clojure 版本?
-
适用于我在 Linux 上使用 Clojure 1.5.1 和默认 JVM 设置。
-
clojure 1.5.1 在 Mac 上(随自制软件安装)。我用更多细节更新了问题描述。
-
@Ankur user100464 运行时会发生什么(last (clojure.math.combinatorics/subsets (range 1000)))?你有什么 -Xmx 设置?