【发布时间】:2013-08-08 07:00:26
【问题描述】:
我正在尝试解析一个相当小的 (
(require '[clojure.data.xml :as xml]
'[clojure.java.io :as io])
(xml/parse (io/reader "data/small-sample.xml"))
我收到一个错误:
OutOfMemoryError Java heap space
clojure.lang.Numbers.byte_array (Numbers.java:1216)
clojure.tools.nrepl.bencode/read-bytes (bencode.clj:101)
clojure.tools.nrepl.bencode/read-netstring* (bencode.clj:153)
clojure.tools.nrepl.bencode/read-token (bencode.clj:244)
clojure.tools.nrepl.bencode/read-bencode (bencode.clj:254)
clojure.tools.nrepl.bencode/token-seq/fn--3178 (bencode.clj:295)
clojure.core/repeatedly/fn--4705 (core.clj:4642)
clojure.lang.LazySeq.sval (LazySeq.java:42)
clojure.lang.LazySeq.seq (LazySeq.java:60)
clojure.lang.RT.seq (RT.java:484)
clojure.core/seq (core.clj:133)
clojure.core/take-while/fn--4236 (core.clj:2564)
这是我的 project.clj:
(defproject dats "0.1.0-SNAPSHOT"
...
:dependencies [[org.clojure/clojure "1.5.1"]
[org.clojure/data.xml "0.0.7"]
[criterium "0.4.1"]]
:jvm-opts ["-Xmx1g"])
我尝试在我的 .bash_profile 中设置 LEIN_JVM_OPTS 和 JVM_OPTS,但没有成功。
当我尝试以下 project.clj 时:
(defproject barber "0.1.0-SNAPSHOT"
...
:dependencies [[org.clojure/clojure "1.5.1"]
[org.clojure/data.xml "0.0.7"]
[criterium "0.4.1"]]
:jvm-opts ["-Xms128m"])
我收到以下错误:
Error occurred during initialization of VM
Incompatible minimum and maximum heap sizes specified
Exception in thread "Thread-5" clojure.lang.ExceptionInfo: Subprocess failed {:exit-code 1}
知道如何增加我的 leiningen repl 的堆大小吗?
谢谢。
【问题讨论】:
-
是否正在将一些数据(XML 解析结果)存储在数组中?如果是,它有多大?
-
你是在调用 REPL 的第二行吗?
-
Chiron:尚未将 XML 存储在任何数据结构中。只需像我的帖子中那样调用 parse 方法。 Igrapenthin:是的,我正在调用 REPL 中的解析行。该文件为 50MB,已解压缩。
-
正如我在回答中所指出的,所有在 repl 顶层返回的东西都被存储(并且即使它们会变得懒惰也被完全评估),首先存储为 *1,然后存储为 *2等。
标签: xml-parsing clojure out-of-memory clojure-java-interop