Yeah, rewrite that to not hold the head of "lines". In particular, get rid of "counts" entirely, get rid of "(nth lines ...)", and use something like
(loop [lines (seq lines) res {}] (if lines (recur (next lines) (update-res res (first lines))) res)) as your loop. On Tue, Nov 12, 2013 at 3:19 AM, Jiaqi Liu <liujiaq...@gmail.com> wrote: > hi , guys > I wrote the following codes to parse log files. > it's alright to parse small one. > But with big log files , i got the following error: > "OutOfMemoryError GC overhead limit exceeded clojure.core/line-seq > (core.clj:2679)" > > (defn parse-file > "" > [file] > (with-open [rdr (io/reader file)] > (println "Statistic result : " (parse-recur rdr)))) > > (defn parse-recur > "" > [rdr] > (let [lines (line-seq rdr) > counts (count lines)] > (loop [len counts > res {}] > (if (zero? len) > res > (recur (dec len) > (update-res res (nth lines (- counts len)))))))) > > (defn update-res > "" > [res line] > (let [params (string/split line #",") > id (if (> (count params) 1) (params 0) "0")] > (if (res id) > (update-in res [id] inc) > (assoc res id 1)))) > > > How can fix this bug ? > and how to optimize this produce to run faster ? > > Any suggestion will be appreciated~ > > BR > > ------------------------------------ > > 刘家齐 (Jacky Liu) > > > > 手机:15201091195 邮箱:liujiaq...@gmail.com > > Skype:jacky_liu_1987 QQ:406229156 > > -- > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. > -- -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.