On Jul 27, 1:57 pm, Berlin Brown <berlin.br...@gmail.com> wrote:
> "One thing you need to do is define what you mean exactly when you say
> "Java
> vs Clojure." "
>
> Like I said, I didn't want to get too focused on this particular
> example. Is there code where I could run in Clojure and where I could
> run in Java that would end up with the same result. And then I could
> see the differences in performance. Also is there an example where
> Clojure code is comparable.
>
> For example, lets say the Euler problem number 1 wants you want to
> return a result of 123.
>
> The end result is 123, if I write code in Java and then in Clojure, I
> want to see the runtimes of the different versions.
>
> On Jul 27, 1:34 pm, Aaron Cohen <remled...@gmail.com> wrote:
>
> > One thing you need to do is define what you mean exactly when you say "Java
> > vs Clojure."
> > In your example you are comparing clojure code vs java code but you are also
> > comparing clojure data structures (PersistentMap) with traditional Java data
> > structures (HashMap). I'm not sure you meant to conflate the two.
>
> > Also, there have been plenty of threads that start off comparing java and
> > clojure performance and eventually end up at near-equivalent performance
> > after using type hints/coercion/etc. It has become something of a FAQ. I'd
> > start
> > with:http://groups.google.com/groups/search?q=group:clojure+performance&qt...
> > <http://groups.google.com/groups/search?q=group:clojure+performance&qt...>
> > -- Aaron
>
> > On Mon, Jul 27, 2009 at 1:06 PM, BerlinBrown <berlin.br...@gmail.com> wrote:
>
> > > I was coming up with some performance tests for Clojure, going back
> > > and forth between different JVM languages (JRuby, Scala) and mainly
> > > looking at pure Java code. So far I have found that clojure is about
> > > 5-10 times as slow as comparable code in Clojure. Of course this is
> > > before any optimizations.
>
> > > Here is my question, do you have any code both Clojure and Java where
> > > there is a one to one match between code where Clojure runs as fast as
> > > Java. It could be anything.
>
> > > Here is one example:
> > > This is code from clojure/contrib to convert a list of data into a
> > > frequency count map. Pretty standard stuff.
>
> > > (defn frequencies
> > > "Returns a map from distinct items in coll to the number of times
> > > they appear."
> > > [coll]
> > > ;;;;;;;;;
> > > (reduce (fn [counts x]
> > > (assoc counts x (inc (get counts x 0))))
> > > {} coll))
>
> > > (dotimes [x 4]
> > > (println "i: " (int (Math/pow 10.0 x)))
> > > (time
> > > (dotimes [_ (int (Math/pow 10.0 x))]
> > > (let [a (for [_ (range 1000)] (random-string 3))]
> > > (frequencies a)))))
>
> > > ----------------------
>
> > > public static Map frequencies(final List list) {
> > > final Map map = new HashMap();
> > > // Simple Box and then unbox the count as the value for this
> > > map //
> > > for (Iterator it = list.iterator(); it.hasNext(); ) {
> > > final Object o = it.next();
> > > final String s = o.toString();
> > > Integer prev = (Integer) map.get(s);
> > > if (prev == null) {
> > > // Put a new value on th map
> > > final Integer count = ONE;
> > > map.put(s, count);
> > > } else {
> > > final Integer inc = new Integer(prev.intValue() + 1);
> > > map.put(s, inc);
> > > } // End of the if - else //
> > > }
> > > return map;
> > > }
> > > ----------------------
>
> > > Clojure Results (same machine 1.5 JDK)
>
> > > i: 1
> > > "Elapsed time: 51.657859 msecs"
> > > i: 10
> > > "Elapsed time: 212.568221 msecs"
> > > i: 100
> > > "Elapsed time: 1623.107702 msecs"
> > > i: 1000
> > > "Elapsed time: 16356.185166 msecs"
> > > (used:2M/0M [2M,63M ])
> > > Done
> > > Performing simple garbage collection cooldown
> > > (used:2M/0M [2M,63M ])
> > > (used:2M/0M [2M,63M ])
>
> > > -------------
>
> > > Here are the Java results.
>
> > > 14.631606999999999 ms
> > > 4.828342999999999 ms
> > > i: 10
> > > Elapsed time: 9.803628 msecs
> > > i: 100
> > > Elapsed time: 97.562451 msecs
> > > i: 1000
> > > Elapsed time: 972.775771 msecs
> > > (used:1M/0M [1M,63M ])
> > > (used:1M/0M [1M,63M ])
> > > (used:1M/0M [1M,63M ])
>
> > > NOTE:!!! This is just one example. All my other examples, ended up
> > > the same way. I hope you don't nitpick this one.
>
> > > I know we should take performance tests with a grain a salt. But at
> > > the same time, I feel we should at least try to measure the speed of
> > > some of our code. I haven't found many speed tests out there on
> > > clojure.
"Also, there have been plenty of threads that start off comparing java
and
clojure performance and eventually end up at near-equivalent
performance
after using type hints/coercion/etc"
Really? I haven't seen one snippet of Java code and Clojure code that
does similar thing where the runtime is equivalent.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---