Hi,
I was experimenting with Clojure and XML and stumbled upon a lengthy
hang when exiting java which was tracked down to the use of
clojure.contrib.lazy-xml. Here's a toy example which exhibits the
issue:
Script started on Wed Jul 29 15:06:44 2009
[~/dev/clojure]$ cat read-xml-lazy.clj
(ns strange
(:use clojure.contrib.lazy-xml)
(import (java.io ByteArrayInputStream)))
(time (clojure.contrib.lazy-xml/parse-trim
(ByteArrayInputStream. (.getBytes (slurp "msgs.xml")))))
#_(System/exit 0)
[~/dev/clojure]$ time java -cp clojure-1.0.0.jar\;clojure-contrib.jar
clojure.lang.Script read-xml-lazy.clj
"Elapsed time: 691.81977 msecs"
real 1m1.796s
user 0m0.031s
sys 0m0.061s
[~/dev/clojure]$ # now without laziness
[~/dev/clojure]$ cat read-xml-nonlazy.clj
(ns strange
(import (java.io ByteArrayInputStream)))
(time (clojure.xml/parse
(ByteArrayInputStream. (.getBytes (slurp "msgs.xml")))))
#_(System/exit 0)
[~/dev/clojure]$ time java -cp clojure-1.0.0.jar\;clojure-contrib.jar
clojure.lang.Script read-xml-nonlazy.clj
"Elapsed time: 15493.727555 msecs"
real 0m16.406s
user 0m0.047s
sys 0m0.031s
[~/dev/clojure]$ java -version
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) Client VM (build 14.0-b16, mixed mode, sharing)
[~/dev/clojure]$ exit
exit
Script done on Wed Jul 29 15:11:14 2009
While the time to perform the lazy xml read is much less than the non-
lazy, it takes nearly a minute to exit java. If the (System/exit 0)
form is enabled, then the exit from java is immediate.
This is on a Windows XP platform, using cygwin as the shell, although
the same issue occurs when run under cmd.exe. The version of clojure-
contrib is that provided by the "Programming Clojure" download.
The msgs.xml file is about 3.7MB and contains about 1300 XML elements
under the root. It looks a bit like:
<document>
<Message>
...many elements in message
</Message>
<Message>
...many elements in message
</Message>
</document>
So, it looks like my mother was right and laziness costs in the end.
Is anyone able to shed light on what might be going on here?
Many thanks,
Mark Willson
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---