Ok, I changed the java version to add x to an accumulator and now it
runs just a little slower than clojure, probably because of the extra
adding. And if you don't mind one more trivial example...
Should I be able assign to the members of an object in Clojure just as
fast as I could in Java? I have two forms below, one calls the
setLocation of a Point2D object, and the other does the assignment in
Clojure and is about 3 times slower.
(dotimes [_ 5]
(let [a (Point2D$Double. 1 2)
b (Point2D$Double. 2 3)
add (fn [^Point2D a ^Point2D b]
(.setLocation a
(+ (.getX a) (.getX b))
(+ (.getY a) (.getY b))))]
(time (dotimes [_ (int 1e9)]
(add a b)))))
(dotimes [_ 5]
(let [a (Point2D$Double. 1 2)
b (Point2D$Double. 2 3)
add (fn [^Point2D$Double a ^Point2D$Double b]
(set! (.x a) (+ (.x a) (.x b)))
(set! (.y a) (+ (.y a) (.y b))))]
(time (dotimes [_ (int 1e9)]
(add a b)))))
On Mar 18, 10:08 pm, David Nolen <[email protected]> wrote:
> On Sat, Mar 19, 2011 at 12:26 AM, Jarl Haggerty <[email protected]>wrote:
>
>
>
> > Is there a reason I can't get this clojure program to compare with the
> > java one?
>
> > The following code:
>
> > for(int q = 0;q < 5;q++){
> > Point2D.Float a = new Point2D.Float(1, 2), b = new
> > Point2D.Float(3, 4);
> > long start = System.currentTimeMillis();
> > for(int d = 0;d < (int)1e9;d++){
> > a.getX();
> > }
> > long stop = System.currentTimeMillis();
> > System.out.println(stop - start);
> > }
>
> > prints this:
>
> > 7
> > 6
> > 0
> > 0
> > 0
>
> That's 1 billion operations getting JITed away. Not really useful for
> profiling real programs, eh? :)
>
> David
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en