http://groups.google.com/group/clojure/browse_thread/thread/7ab7c1e62c468d7c/37678e50ca75be06?q=group:clojure+performance+rich#37678e50ca75be06 <http://groups.google.com/group/clojure/browse_thread/thread/7ab7c1e62c468d7c/37678e50ca75be06?q=group:clojure+performance+rich#37678e50ca75be06> http://groups.google.com/group/clojure/browse_thread/thread/6cd78dea88e2d63b/dedb414c248f4191?q=group:clojure+performance+rich#dedb414c248f4191
<http://groups.google.com/group/clojure/browse_thread/thread/6cd78dea88e2d63b/dedb414c248f4191?q=group:clojure+performance+rich#dedb414c248f4191>For more examples, please just browse the first google link I gave you. -- Aaron On Mon, Jul 27, 2009 at 2:00 PM, Berlin Brown <berlin.br...@gmail.com>wrote: > > > > 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 -~----------~----~----~----~------~----~------~--~---