Range is lazy.

First you define a range, which is just a "promise" that the variable will
be rendering a seq with 10M when asked for the elements.

When you count the sequence you realize it and it takes up much space. When
you let go if it it's of course GCed.

The problem is that you hold on to the head (first element) of the sequence.
If you do

(count (range 10000000))

clojure will go through it lazily and throw away elements as they are
counted, hence much less memory usage.

Let go of the head! :)

/Linus

2011/10/25 Mike <cki...@gmail.com>

> It appears I'm not understanding how something works in the REPL (or
> maybe deeper).  For instance:
>
> (def big (range 10000000))
> ; memory is small now
> (count big) => 10000000
> ; memory is huge now
> (System/gc)
> ; memory is still huge now
> (def big nil)
> (System/gc)
> ; memory is small again
>
> So somehow when count "realizes" big, I'm guessing it gets memoized
> and stuck in some sort of cache attached to the var big.
>
> If I:
>
> (do (System/gc) (count (range 10000000)) (System/gc))
> ; memory is small before and after
>
> I think the version I wrote originally is fine; I just wasn't testing
> it properly.  Sorry to bother folks!
>
> Mike
>
> --
> 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 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

Reply via email to