Hi, learning clojure so this may just be a lack of understanding on my
part. Been looking at a post about swing and clojure and it used an
agent to implement a flipper with code below.

When I run the code in clojure 1.2.1 via
(def flipper (new-flipper))
(send flipper start)

all is fine and the counts increase etc.

Under 1.3 or latest 1.4 it runs out of heap, shortly after I attempt
to defref flipper and see the state I get the exception below.

Any ideas ? My lack of understanding or a bug ??

Thanks
Graham

-----------------------

AgentTest.core=> @flipper
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
        at java.lang.Class.privateGetPublicMethods(Class.java:2547)
        at java.lang.Class.getMethods(Class.java:1410)
        at clojure.lang.Reflector.getMethods(Reflector.java:375)
        at clojure.lang.Reflector.invokeStaticMethod(Reflector.java:224)
        at clojure.main$repl_caught.invoke(main.clj:172)
        at clojure.main$repl$fn__6020.invoke(main.clj:267)
        at clojure.main$repl.doInvoke(main.clj:265)
        at clojure.lang.RestFn.invoke(RestFn.java:421)
        at clojure.main$repl_opt.invoke(main.clj:331)
        at clojure.main$main.doInvoke(main.clj:427)
        at clojure.lang.RestFn.invoke(RestFn.java:397)
        at clojure.lang.Var.invoke(Var.java:397)
        at clojure.lang.AFn.applyToHelper(AFn.java:159)
        at clojure.lang.Var.applyTo(Var.java:518)
        at clojure.main.main(main.java:37)

------------- code ----------------

(ns AgentTest.core)

(defn new-flipper []
  (agent {:total 0, :heads 0,
          :running false,
          :random (java.util.Random.)}))

(defn calculate [state]
  (if (:running state)
    (do (send *agent* calculate)
        (assoc state
          :total (inc (:total state))
          :heads (if (.nextBoolean (:random state))
                   (inc (:heads state))
                   (:heads state))))
    state))

(defn start [state]
  (send *agent* calculate)
  (assoc state :running true))

(defn stop [state]
  (assoc state :running false))

-- 
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