You can use "javap -c" out of the JDK to get the bytecodes that are handed to 
the VM.

However, HotSpot does amazing things with the bytecodes after the code begins 
to run, so a disassembly can be quite misleading. I measure far more often than 
I view bytecode.

Stu

> In common lisp I use the (disassemble) function which generally
> gives back an assembler listing of the code that would be executed.
> Is there a Java function which will return the byte codes that get
> executed? Could this be used to create a (disassemble) function for
> Clojure? Having such a function means that you don't have to guess
> what the program is actually doing.
> 
> On 9/19/2010 1:19 PM, Ranjit wrote:
>> Hi Nicholas,
>> 
>> Thanks for the advice. I already tried (set! *warn-on-reflection*
>> true), but it doesn't generate any warnings for any of these
>> functions.
>> 
>> I tried adding ^doubles in gaussian-matrix1 as you suggested but that
>> didn't really change the speed at all. And changing next-gaussian to a
>> macro didn't make much difference to gaussian-matrix1, and it doesn't
>> work with gaussian-matrix2 at all and I'm not quite sure yet how to
>> fix it so it does.
>> 
>> I would have thought gaussian-matrix1 would be faster than gaussian-
>> matrix2, but it turns out it's the opposite. Then I thought that the
>> reason using aset was slower must have something to do with
>> reflection, but that doesn't seem to be the case.
>> 
>> So I'm a bit confused now.
>> 
>> More generally though, the main reason I wanted to use Java arrays was
>> because I have to use FFT's in my simulation and I figured it would be
>> better to do everything in Java arrays rather than copy a Clojure
>> vector into a 2d array and back every time I needed to do an FFT. But
>> am I wrong in thinking that?
>> 
>> Thanks,
>> 
>> Ranjit
>> 
>> 
>> 
>> On Sep 19, 11:20 am, Nicolas Oury<nicolas.o...@gmail.com>  wrote:
>>> A first good start is to put
>>> (set! *warn-on-relection* true) at the start of the file and removes
>>> all reflective access.
>>> 
>>> Before the 1.3 release, function cannot receive/returns primitive so
>>> you might consider
>>> (defmacro next-gaussian []
>>>   `(.nextGaussian  ^Random r))
>>> 
>>> (^Random is here to make sure r is seen with the right type)
>>> 
>>> in both function, add ^doubles before arr at the binding point.
>>> (defn ... [^doubles arr....])
>>> 
>>> then set will not be rflective and be as fast as a set in java.
>>> 
>>> Ask other questions of you need more help.
>>> The best reference on all that: clojure.org/java_interop
>>> 
>>> 
>>> 
>>> On Sun, Sep 19, 2010 at 3:29 PM, Ranjit<rjcha...@gmail.com>  wrote:
>>>> Hi,
>>>> I'm trying learn Clojure to see if I can use it in my simulations, and
>>>> one thing I need to do is generate arrays of normally distributed
>>>> numbers.
>>>> I've been able to come up with the following two ways of doing this.
>>>> gaussian-matrix2 is a lot faster than gaussian-matrix1, but I'm not
>>>> sure why. And it's still slower than it should be I think. Is there
>>>> anything I can do to speed this up still further?
>>>> Thanks,
>>>> -Ranjit
>>>> (import java.util.Random)
>>>> (def r (Random. ))
>>>> (defn next-gaussian [] (.nextGaussian r))
>>>> (defn gaussian-matrix1 [arr L]
>>>>     (doseq [x (range L) y (range L)] (aset arr x y (next-gaussian))))
>>>> (defn gaussian-matrix2 [L]
>>>>     (into-array (map double-array (partition L (repeatedly (* L L)
>>>> next-gaussian)))))
>>>> --
>>>> 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
>>> --
>>> Sent from an IBM Model M, 15 August 1989.
> 
> -- 
> 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 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

Reply via email to