Actaully I think it comes down to the use of the rather generic Deref. I
fired up a repl and ran the following

(let [v (clojure.lang.Volatile. {})]
  (dotimes [x ...]
    (.reset v (.deref v))))

I'm seeing very similar times to the one for the AtomicReference.

Timothy

On Wed, Mar 11, 2015 at 11:08 AM, Brent Millare <brent.mill...@gmail.com>
wrote:

> I find it hard to believe GC would be a factor since there is very little
> being generated here. Also, while the outside loop is only 10 iterations of
> timings, in the inside loops the code is called for 100 million iterations.
> Anyways, running it with criterium didn't change the ranking.
>
> Here is the output:
> volatile: WARNING: Final GC required 1.149417308725186 % of runtime
> Evaluation count : 4156079100 in 60 samples of 69267985 calls.
>              Execution time mean : 12.975339 ns
>     Execution time std-deviation : 0.188921 ns
>    Execution time lower quantile : 12.823222 ns ( 2.5%)
>    Execution time upper quantile : 13.272950 ns (97.5%)
>                    Overhead used : 1.613416 ns
> AtomicLong: Evaluation count : 6921767160 in 60 samples of 115362786 calls.
>              Execution time mean : 7.155989 ns
>     Execution time std-deviation : 0.124147 ns
>    Execution time lower quantile : 7.048738 ns ( 2.5%)
>    Execution time upper quantile : 7.330448 ns (97.5%)
>                    Overhead used : 1.613416 ns
> AtomicReference: Evaluation count : 5814704460 in 60 samples of 96911741
> calls.
>              Execution time mean : 8.791224 ns
>     Execution time std-deviation : 0.185229 ns
>    Execution time lower quantile : 8.564921 ns ( 2.5%)
>    Execution time upper quantile : 9.340265 ns (97.5%)
>                    Overhead used : 1.613416 ns
>
> Found 4 outliers in 60 samples (6.6667 %)
> low-severe 2 (3.3333 %)
> low-mild 2 (3.3333 %)
>  Variance from outliers : 9.4134 % Variance is slightly inflated by
> outliers
> atom: Evaluation count : 4038207840 in 60 samples of 67303464 calls.
>              Execution time mean : 13.007604 ns
>     Execution time std-deviation : 0.202285 ns
>    Execution time lower quantile : 12.819268 ns ( 2.5%)
>    Execution time upper quantile : 13.275983 ns (97.5%)
>                    Overhead used : 1.613416 ns
>
> Note: I bench the get/set expression, not the creation of the
> volatile/atomic*/atom
>
> eg.
> (let [v (volatile! 1)]
>   (c/bench (vreset! v @v)))
>
> On Wednesday, March 11, 2015 at 12:30:06 PM UTC-4, tbc++ wrote:
>>
>> There's many other factors involved here though, GC, JIT warmup, etc.
>> That's kindof what criterium helps out with, removing all the variables and
>> running something until the JIT has warmed up enough (10 iterations
>> probably isn't enough).
>>
>> Timothy
>>
>>
>>   --
> 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.
>



-- 
“One of the main causes of the fall of the Roman Empire was that–lacking
zero–they had no way to indicate successful termination of their C
programs.”
(Robert Firth)

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