2014-07-12 11:56 GMT+02:00 James Reeves <ja...@booleanknot.com>:

> The JVM optimises sections of code that are frequently executed, so the
> second expression benefits from the optimisation that happens during the
> first expression. My guess is that if you were to swap the two expressions
> around, you'd find that the first expression always takes longer, no matter
> which way around it is.
>
> Benchmarking libraries like Criterium get around this by "warming up" the
> JVM with a few practice runs before recording the benchmarks. I'd advise
> using Criterium over clojure.core/time if you want to benchmark things
> accurately.
>

​That may be a part of it, but there is more to it. When I use 1e9 for
range-length I get:
    OutOfMemoryError GC overhead limit exceeded  java.lang.Long.valueOf
(Long.java:577)
    "Elapsed time: 56970.117811 msecs"
    [999999988 12]

By doing first (count d) and then (count t) something is retained, which
makes the execution longer and the usage of memory higher. And I do not
understand that. Because when creating t and d everything has to be
evaluated​. So why has the sequence of the statements influence on the
memory usage?



> On 12 July 2014 10:29, Cecil Westerhof <cldwester...@gmail.com> wrote:
>
>> I do the following (with range-length 1e8):
>>     (time (let [[t d] (split-with #(< % 12) (range range-length))]
>>                [(count d) (count t)]))
>>
>>     (time (let [[t d] (split-with #(< % 12) (range range-length))]
>>                (into [] (reverse [(count t) (count d)]))))
>>
>> ​This gives:
>>     "Elapsed time: 68105.338314 msecs"
>>     [99999988 12]
>>     "Elapsed time: 11545.667394 msecs"
>>     [99999988 12]
>>
>> So the first expression​
>> ​ takes as six times as long to evaluate. ​
>> ​I understood that this has to do with that in the first case there is
>> head retention. But I do not understand this. What is happening here?​
>>
>>
-- 
Cecil Westerhof

-- 
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/d/optout.

Reply via email to