On Fri, Jul 24, 2009 at 5:04 AM, Jan Rychter<j...@rychter.com> wrote:
>
>> On Jul 21, 5:51 am, Jan Rychter <j...@rychter.com> wrote:
>>> Is there a way to get the size of a data structure in Clojure?
>>>
>>> I've been wondering how much more space-efficient vectors are than
>>> lists, but I don't know how to measure it.
>
> Stuart Sierra <the.stuart.sie...@gmail.com> writes:
>> Short answer: no, because Java has no sizeof operator.
>>
>> You can use Java profiling tools to examine the memory usage of your
>> app if needed.
>>
>> Since all of clojure's data structures are persistent (reusable), they
>> won't necessarily meet your expectations for memory usage based on the
>> standard definitions of vector/list/etc.  A clojure vector is *not*
>> just an array.  A clojure list is *not* just a linked list.  The names
>> refer to the performance characteristics (vectors allow random access,
>> lists allow linear access) rather than the implementation.  In fact,
>> most of Clojure's data structures are variants of trees, and they are
>> quite efficient.
>>
>> If you are concerned about memory usage, I recommend you write a
>> prototype of your app using Clojure's built-in structures first.  If
>> that uses too much memory, try refactoring your code to use Java
>> arrays or some other Java data structure optimized for your use case.
>
> I should have described the problem better. In my case, I'm not
> considering using native Java data structures. I have stacks implemented
> on top of Clojure vectors and Clojure lists. I do not care that much
> about random access, but I do care about O(1) count operation (which
> both lists and vectors support). I measured the performance in a
> real-life scenario and it is nearly identical for vectors and lists
> (lists are actually slightly faster).
>
> What I would like to know is given the same amount of data, which
> structure will be more memory-efficient?
>

Vectors hold 32 items in a node while lists hold only one item per
node, so vectors will be more space efficient.

Rich

--~--~---------~--~----~------------~-------~--~----~
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