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.

Reply via email to