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