Re: Scala success!

2,432 views
Skip to first unread message

Joel Dice

unread,
Dec 3, 2012, 4:29:27 PM12/3/12
to av...@googlegroups.com
Hi Alex,

On Mon, 3 Dec 2012, Alex Cruise wrote:

> Hi folks,
> I found out about Avian today, compiled an openjdk build, and the Scala REPL
> works! �(Mostly... The last declaration failed the first time with an NPE,
> then succeeded the second time)

It looks a lot like this bug:

https://groups.google.com/group/avian/msg/9de455e1d200b202

Especially since it's intermittent and has not been resolved upstream
AFAIK. The whole discussion is available here:

https://groups.google.com/group/avian/browse_thread/thread/6ff9f841b20ff636/9de455e1d200b202

Pablo Guerrero had some ideas about how to address it, but I don't know if
they found their way into a Scala release.

>
> Thanks for the great work so far! �I'll be sticking around!
>
> -0xe1a
>
>
> [alex@alex-desktop linux-x86_64-openjdk]$ ./avian -cp/home/alex/.m2/repository/org/scala-lang/scala-library/2.9.2/scala-library-
> 2.9.2.jar:/home/alex/.m2/repository/org/scala-lang/scala-compiler/2.9.2/sca
> la-compiler-2.9.2.jar 'scala.tools.nsc.interpreter.Runner'
> -usejavacp
> Failed to created JLineReader: java.lang.NoClassDefFoundError:
> scala/tools/jline/console/ConsoleReader
> Falling back to SimpleReader.
> Welcome to Scala version 2.9.2 (Avian, Java 1.7.0_09-icedtea).
> Type in expressions to have them evaluated.
> Type :help for more information.�
>
> scala> val foo = (1 to 100).toList
> foo: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
> 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
> 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
> 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
> 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
> 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
> 94, 95, 96, 97, 98, 99, 100)�
>
> scala> foo.map(x => x * x)�
> res0: List[Int] = List(1, 4, 9, 16, 25, 36, 49, 64, 81, 100,
> 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529,
> 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1156, 1225,
> 1296, 1369, 1444, 1521, 1600, 1681, 1764, 1849, 1936, 2025,
> 2116, 2209, 2304, 2401, 2500, 2601, 2704, 2809, 2916, 3025,
> 3136, 3249, 3364, 3481, 3600, 3721, 3844, 3969, 4096, 4225,
> 4356, 4489, 4624, 4761, 4900, 5041, 5184, 5329, 5476, 5625,
> 5776, 5929, 6084, 6241, 6400, 6561, 6724, 6889, 7056, 7225,
> 7396, 7569, 7744, 7921, 8100, 8281, 8464, 8649, 8836, 9025,
> 9216, 9409, 9604, 9801, 10000)�
>
> scala> foo.map(x => x*x*x)
>
> java.lang.NullPointerException
> � � � � atscala.tools.nsc.symtab.SymbolTable$perRunCaches$$anonfun$clearAll$1.reflMet
> hod$Method1(SymbolTable.scala:140)
> � � � � atscala.tools.nsc.symtab.SymbolTable$perRunCaches$$anonfun$clearAll$1.apply(S
> ymbolTable.scala:140)
> � � � � atscala.tools.nsc.symtab.SymbolTable$perRunCaches$$anonfun$clearAll$1.apply(S
> ymbolTable.scala:135)
> � � � � at
> scala.collection.mutable.HashSet.foreach(HashSet.scala:76)
> � � � � atscala.tools.nsc.symtab.SymbolTable$perRunCaches$.clearAll(SymbolTable.scala
> :135)
> � � � � at
> scala.tools.nsc.Global$Run.compileSources(Global.scala:1025)
> � � � � atscala.tools.nsc.interpreter.IMain$ReadEvalPrint.compileAndSaveRun(IMain.sca
> la:756)
> � � � � at
> scala.tools.nsc.interpreter.IMain$ReadEvalPrint.compile(IMain.scala:731)
> � � � � at
> scala.tools.nsc.interpreter.IMain$Request.compile(IMain.scala:873)
> � � � � at
> scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:576)
> � � � � at
> scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:543)
> � � � � at
> scala.tools.nsc.interpreter.ILoop.reallyInterpret$1(ILoop.scala:694)
> � � � � at
> scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:745)
> � � � � at
> scala.tools.nsc.interpreter.ILoop.command(ILoop.scala:651)
> � � � � at
> scala.tools.nsc.interpreter.ILoop.processLine$1(ILoop.scala:542)
> � � � � at
> scala.tools.nsc.interpreter.ILoop.loop(ILoop.scala:550)
> � � � � at
> scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:822)
> � � � � at
> scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:838)
> � � � � at
> scala.tools.nsc.interpreter.Runner$.main(Runner.scala:10)
> � � � � at scala.tools.nsc.interpreter.Runner.main(Runner.scala)
>
> Abandoning crashed session.
> scala> foo.map(x => x*x*x)
> res3: List[Int] = List(1, 8, 27, 64, 125, 216, 343, 512, 729,
> 1000, 1331, 1728, 2197, 2744, 3375, 4096, 4913, 5832, 6859,
> 8000, 9261, 10648, 12167, 13824, 15625, 17576, 19683, 21952,
> 24389, 27000, 29791, 32768, 35937, 39304, 42875, 46656, 50653,
> 54872, 59319, 64000, 68921, 74088, 79507, 85184, 91125, 97336,
> 103823, 110592, 117649, 125000, 132651, 140608, 148877, 157464,
> 166375, 175616, 185193, 195112, 205379, 216000, 226981, 238328,
> 250047, 262144, 274625, 287496, 300763, 314432, 328509, 343000,
> 357911, 373248, 389017, 405224, 421875, 438976, 456533, 474552,
> 493039, 512000, 531441, 551368, 571787, 592704, 614125, 636056,
> 658503, 681472, 704969, 729000, 753571, 778688, 804357, 830584,
> 857375, 884736, 912673, 941192, 970299, 1000000)
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Avian" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/avian/-/_B-HckKn0CMJ.
> To post to this group, send email to av...@googlegroups.com.
> To unsubscribe from this group, send email to
> avian+un...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/avian?hl=en.
>
>

Pablo Guerrero

unread,
Dec 12, 2012, 11:10:18 AM12/12/12
to av...@googlegroups.com
Hi Alex, 

As Joel said I was trying to solve this problem, but in the end I didn't  find a convincing solution.

The problem is with the weak reference, it's described in detail in the threads that Joel is pointing.  But after after checking more in detail, I'm not sure the solution to this problem doesn't introduce new ones, because they introduce the weak reference to solve other problem, if it's just removed this problem wil come back.

In any case, I didn't try with scala 2.10-RC3 that it's the last available. Checking quickly the code, it seems to me that they are doing code generation differently as I cannot find some of the things that were there before. If you have you environment ready it would be nice to give it a try.

I also copy here some more info I got while checking this issue (not present on the other threads) that can direct you to the right places in case you want to debug it.
Use the code from v2.9.1 tag as lines doesn't correspond with master links now.

General Info in scala compiler
http://www.sts.tu-harburg.de/people/mi.garcia/ScalaCompilerCorner/
http://lampwww.epfl.ch/~magarcia/ScalaCompilerCornerReloaded/

The compiled code is wrong for structural types, the problem is generated form the file

https://github.com/scala/scala/blob/v2.9.1/src/library/scala/reflect/generic/UnPickler.scala

At line 401 you will see { def setFlag(mask: Long): this.type } that it's an structural type. The code generated for this includes the weak reference that fails in avian.

The code generation is made in this file:

https://github.com/scala/scala/blob/master/src/compiler/scala/tools/nsc/transform/CleanUp.scala

Look at lines:

Line 168: Look at the newMethod implementation
Line 249: The real implementation !!!! This code maps to the problem shown in the first answer here: http://www.scala-lang.org/node/11807

The bytecode generation for the JVM is on this file:
https://github.com/scala/scala/blob/v2.9.1/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala

Then JClass seems to be important too, it's here.
https://github.com/scala/scala/tree/v2.9.1/src/fjbg/ch/epfl/lamp/fjbg

The information it's a little bit disperse, but it's all there. If you have any question, let me know.

I hope it's useful. 

Pablo

On Monday, December 3, 2012 10:29:27 PM UTC+1, Joel Dice wrote:
Hi Alex,

On Mon, 3 Dec 2012, Alex Cruise wrote:

> Hi folks,
> I found out about Avian today, compiled an openjdk build, and the Scala REPL
> works! �(Mostly... The last declaration failed the first time with an NPE,
> then succeeded the second time)

It looks a lot like this bug:

https://groups.google.com/group/avian/msg/9de455e1d200b202

Especially since it's intermittent and has not been resolved upstream
AFAIK.  The whole discussion is available here:

https://groups.google.com/group/avian/browse_thread/thread/6ff9f841b20ff636/9de455e1d200b202

Pablo Guerrero had some ideas about how to address it, but I don't know if
they found their way into a Scala release.

>
> Thanks for the great work so far! �I'll be sticking around!
>
> -0xe1a
>
>
>       [alex@alex-desktop linux-x86_64-openjdk]$ ./avian -cp/home/alex/.m2/repository/org/scala-lang/scala-library/2.9.2/scala-library-
> 2.9.2.jar:/home/alex/.m2/repository/org/scala-lang/scala-compiler/2.9.2/sca
>       la-compiler-2.9.2.jar 'scala.tools.nsc.interpreter.Runner'
>       -usejavacp
>       Failed to created JLineReader: java.lang.NoClassDefFoundError:
>       scala/tools/jline/console/ConsoleReader
>       Falling back to SimpleReader.
>       Welcome to Scala version 2.9.2 (Avian, Java 1.7.0_09-icedtea).
>       Type in expressions to have them evaluated.
>       Type :help for more information.�
>
>       scala> val foo = (1 to 100).toList
>       foo: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
>       14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
>       30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
>       46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
>       62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
>       78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
>       94, 95, 96, 97, 98, 99, 100)�
>
>       scala> foo.map(x => x * x)�
>       res0: List[Int] = List(1, 4, 9, 16, 25, 36, 49, 64, 81, 100,
>       121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529,
>       576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1156, 1225,
>       1296, 1369, 1444, 1521, 1600, 1681, 1764, 1849, 1936, 2025,
>       2116, 2209, 2304, 2401, 2500, 2601, 2704, 2809, 2916, 3025,
>       3136, 3249, 3364, 3481, 3600, 3721, 3844, 3969, 4096, 4225,
>       4356, 4489, 4624, 4761, 4900, 5041, 5184, 5329, 5476, 5625,
>       5776, 5929, 6084, 6241, 6400, 6561, 6724, 6889, 7056, 7225,
>       7396, 7569, 7744, 7921, 8100, 8281, 8464, 8649, 8836, 9025,
>       9216, 9409, 9604, 9801, 10000)�
>
>       scala> foo.map(x => x*x*x)
>
>       java.lang.NullPointerException
>       � � � � atscala.tools.nsc.symtab.SymbolTable$perRunCaches$$anonfun$clearAll$1.reflMet
>       hod$Method1(SymbolTable.scala:140)
>       � � � � atscala.tools.nsc.symtab.SymbolTable$perRunCaches$$anonfun$clearAll$1.apply(S
>       ymbolTable.scala:140)
>       � � � � atscala.tools.nsc.symtab.SymbolTable$perRunCaches$$anonfun$clearAll$1.apply(S
>       ymbolTable.scala:135)
>       � � � � at
>       scala.collection.mutable.HashSet.foreach(HashSet.scala:76)
>       � � � � atscala.tools.nsc.symtab.SymbolTable$perRunCaches$.clearAll(SymbolTable.scala
>       :135)
>       � � � � at
>       scala.tools.nsc.Global$Run.compileSources(Global.scala:1025)
>       � � � � atscala.tools.nsc.interpreter.IMain$ReadEvalPrint.compileAndSaveRun(IMain.sca
>       la:756)
>       � � � � at
>       scala.tools.nsc.interpreter.IMain$ReadEvalPrint.compile(IMain.scala:731)
>       � � � � at
>       scala.tools.nsc.interpreter.IMain$Request.compile(IMain.scala:873)
>       � � � � at
>       scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:576)
>       � � � � at
>       scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:543)
>       � � � � at
>       scala.tools.nsc.interpreter.ILoop.reallyInterpret$1(ILoop.scala:694)
>       � � � � at
>       scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:745)
>       � � � � at
>       scala.tools.nsc.interpreter.ILoop.command(ILoop.scala:651)
>       � � � � at
>       scala.tools.nsc.interpreter.ILoop.processLine$1(ILoop.scala:542)
>       � � � � at
>       scala.tools.nsc.interpreter.ILoop.loop(ILoop.scala:550)
>       � � � � at
>       scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:822)
>       � � � � at
>       scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:838)
>       � � � � at
>       scala.tools.nsc.interpreter.Runner$.main(Runner.scala:10)
>       � � � � at scala.tools.nsc.interpreter.Runner.main(Runner.scala)

Pablo Guerrero

unread,
Dec 12, 2012, 11:28:25 AM12/12/12
to av...@googlegroups.com
The problem is still present in scala 2.10 master:

If you check on https://github.com/scala/scala/blob/master/src/compiler/scala/tools/nsc/transform/CleanUp.scala line 225 there is a method addStaticMethodToClass

This method is generating the wrong bytecode structure that we can see in the coment here: http://www.scala-lang.org/node/11807#comment-53067

To make it clear, it's creating the soft reference at the beginning (in the code using mkNewPolyCache) without having any hard reference to it. And then is using it.

If you check the correct code, it's creating a hard reference in cache, and using it. That's fine. And only at the end creating a soft reference when it's not needed anymore.

The solution is to modify the code in addStaticMethodToClass to behave like to correct solution without breaking something. I tried it, in order to provide some kind of patch, but in the end I had to move to something else and I couldn't continue.

Cheers,
Pablo

Joel Dice

unread,
Jan 29, 2013, 5:14:07 PM1/29/13
to av...@googlegroups.com
On Tue, 29 Jan 2013, simon.och...@gmail.com wrote:

> scala> Test main null
> java/lang/OutOfMemoryError
> java/lang/OutOfMemoryError
> java/lang/OutOfMemoryError
> [1]��� 17650 abort (core dumped)�
> LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64/:. ./avian-dynamic -cp�� -usejavacp
> LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64/:. ./avian-dynamic -cp��
> -usejavacp� 23,18s user 2,34s system 28% cpu 1:29,30 total

Yeah, that's not good. Even if the test is flawed somehow, it shouldn't
cause the process to abort. I'll try to debug it when I have time.

By the way, I tried to build Scala from the Git master branch the other
day, and I couldn't do an "ant dist" because apparently scala-swing.jar
cannot be built with Java 7. Is there a way I can build and test Scala
without scala-swing.jar, or do I need to install Java 6?

Joel Dice

unread,
Jan 31, 2013, 11:41:19 AM1/31/13
to av...@googlegroups.com, simon.och...@gmail.com
Hi Simon,

On Wed, 30 Jan 2013, simon.och...@gmail.com wrote:

> while trying do build scala with Avian, I sym-linked the avian executable to
> avian/bin/java, set $JAVA_HOME to that dir and tried to run ant (version
> 1.8.2) this way ...
>
> LD_LIBRARY_PATH=/usr/lib/jvm/java-7-openjdk-amd64/:/home/soc/Entwicklung/av
> ian/build/linux-x86_64-tails-continuations/ ant
>
> ... but I got this almost immediately:
>
> java.lang.NullPointerException
> � at org.apache.tools.ant.launch.Launcher.run (line 176)
> � at org.apache.tools.ant.launch.Launcher.main (line 109)
>
> The code in question is this one (source from Ant 1.8.3):
>
> ��� private int run(String[] args)
> ����������� throws LaunchException, MalformedURLException {
> ������� String antHomeProperty = System.getProperty(ANTHOME_PROPERTY);
> ������� File antHome = null;
>
> ������� File sourceJar = Locator.getClassSource(getClass());
> ������� File jarDir = sourceJar.getParentFile();������������� // <=== Line
> 176
> ������� String mainClassname = MAIN_CLASS;

Thanks for reporting this, but I'm not able to reproduce it. Here's what
I did:

cd avian
make openjdk=/home/dicej/p/deb/openjdk-7-7~u3-2.1.1/build/openjdk.build/j2sdk-image
cd ../my-ant-project
LD_LIBRARY_PATH=/home/dicej/p/avian/build/linux-x86_64-openjdk:/home/dicej/p/deb/openjdk-7-7~u3-2.1.1/build/openjdk.build/j2sdk-image/jre/lib/amd64/ JAVACMD=/home/dicej/p/avian/build/linux-x86_64-openjdk/avian-dynamic ant

I put an <exec executable="sleep"><arg line="10000"/></exec> in my
build.xml so I could run ps and verify that it was using avian-dynamic
instead of java, which it was. I'm running Ant 1.8.2, though, so maybe
it's behaving differently.

What options did you use when you built Avian?

Joel Dice

unread,
Jan 31, 2013, 1:02:28 PM1/31/13
to av...@googlegroups.com, simon.och...@gmail.com
On Thu, 31 Jan 2013, simon.och...@gmail.com wrote:

> Hi Joel,
>
> What options did you use when you built Avian?
>
>
> I'm using tailcalls, continuations and openjdk.

In that case, this (from your earlier email) looks wrong:

LD_LIBRARY_PATH=/usr/lib/jvm/java-7-openjdk-amd64/:/home/soc/Entwicklung/avian/build/linux-x86_64-tails-continuations/ ant

That should be "linux-x86_64-tails-continuations-openjdk", not
"linux-x86_64-tails-continuations". Not sure if that's the cause of the
problem you're facing, but it's something to try.

Joel Dice

unread,
Jan 31, 2013, 6:23:02 PM1/31/13
to Joel Dice, av...@googlegroups.com, simon.och...@gmail.com
FWIW, I just tried again using Ant 1.8.3 with a
"linux-x86_64-tails-continuations-openjdk" and I didn't have any problems.
I wonder if your symlink trick is causing the wrong libjvm.so to be used
or something like that. Here's what I did:

(cd ~/p/avian-dicej/ && make openjdk=/home/dicej/p/deb/openjdk-7-7~u3-2.1.1/build/openjdk.build/j2sdk-image tails=true continuations=true) && LD_LIBRARY_PATH=/home/dicej/p/avian-dicej/build/linux-x86_64-tails-continuations-openjdk:/home/dicej/p/deb/openjdk-7-7~u3-2.1.1/build/openjdk.build/j2sdk-image/jre/lib/amd64/ JAVACMD="/home/dicej/p/avian-dicej/build/linux-x86_64-tails-continuations-openjdk/avian-dynamic" /home/dicej/trash/p/apache-ant-1.8.3/bin/ant

Joel Dice

unread,
Feb 1, 2013, 10:36:01 AM2/1/13
to simon.och...@gmail.com, av...@googlegroups.com, Joel Dice
On Thu, 31 Jan 2013, simon.och...@gmail.com wrote:

> Yes, that was the problem, thanks!
>
> Although the Ant script reports java version: Avian 1.7.0_09 (1.7), the
> build times are pretty much identical to those when compiling with the
> OpenJDK runtime. It looks like Ant manages to use the OpenJDK runtime
> despite setting PATH, JAVA_HOME and JAVACMD to Avian:
>
> PATH=/home/soc/Entwicklung/avian/build/linux-x86_64-tails-continuations-ope
> njdk/bin/:$PATHLD_LIBRARY_PATH=/home/soc/Entwicklung/avian/build/linux-x86_64-tails-contin
> uations-openjdk/:/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/JAVACMD="/home/soc/Entwicklung/avian/build/linux-x86_64-tails-continuations
> -openjdk/avian-dynamic" ant build
>
> top also reports java and not avian or avian-dynamic in its listing. :-/

I'm guessing something's different about how you're running it, because I
only see avian-dynamic in top. Just to be sure, I unset JAVA_HOME and
replaced my java binary with an empty file. I also ran lsof to verify
that avian-dynamic was
using linux-x86_64-tails-continuations-openjdk/libjvm.so and not the
OpenJDK version. Finally, I added some printf statements to the VM at
key points. All of which makes me sure that Ant is only using Avian on my
system.

Joel Dice

unread,
Feb 1, 2013, 10:41:39 PM2/1/13
to av...@googlegroups.com
Hi Toby,

You'll need to build against the OpenJDK class library as described in the
readme. The default Avian class library does not yet have all the classes
and methods needed to run Scala.


On Fri, 1 Feb 2013, to...@telegraphics.com.au wrote:

> No such luck here on PowerPC. Any hints?
>
> thanks
> --Toby
>
> OS X 10.5.8
>
> g5:darwin-powerpc toby$ java -version
> java version "1.5.0_30"
> Java(TM) 2 Runtime Environment, Standard Edition (build
> 1.5.0_30-b03-389-9M3425)
> Java HotSpot(TM) Client VM (build 1.5.0_30-161, mixed mode, sharing)
>
>
>
> g5:darwin-powerpc toby$ gdb ./avian
> GNU gdb 6.3.50-20050815 (Apple version gdb-967) (Tue Jul 14 02:15:14 UTC
> 2009)
> Copyright 2004 Free Software Foundation, Inc.
> GDB is free software, covered by the GNU General Public License, and you are
> welcome to change it and/or distribute copies of it under certain
> conditions.
> Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB.� Type "show warranty" for details.
> This GDB was configured as "powerpc-apple-darwin"...Reading symbols for
> shared libraries ........ done
>
> vacprs/toby/Downloads/scala-2.9.2//lib/scala-library.jar
> scala.tools.nsc.interpreter.Runner -useja
> Starting program:
> /Volumes/data/Users/toby/Documents/git/avian/build/darwin-powerpc/avian -cp/Volumes/data/Users/toby/Downloads/scala-2.9.2//lib/scala-compiler.jar:/Vol
> umes/data/Users/toby/Downloads/scala-2.9.2//lib/scala-library.jar
> scala.tools.nsc.interpreter.Runner -usejavacp
> Reading symbols for shared libraries +++++++.................... done
> java/lang/NoClassDefFoundError: java/util/concurrent/locks/ReentrantLock
> � at scala/tools/nsc/interpreter/ILoopInit$class.$init$ (line 63)
> � at scala/tools/nsc/interpreter/ILoop.<init> (line 34)
> � at scala/tools/nsc/interpreter/ILoop.<init> (line 40)
> � at scala/tools/nsc/interpreter/Runner$.main (line 10)
> � at scala/tools/nsc/interpreter/Runner.main (unknown line)
>
> Program exited with code 0377.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Avian" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to avian+un...@googlegroups.com.
> To post to this group, send email to av...@googlegroups.com.
> Visit this group at http://groups.google.com/group/avian?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
> �
> �
>
>

to...@telegraphics.com.au

unread,
Feb 1, 2013, 10:47:43 PM2/1/13
to av...@googlegroups.com


On Friday, 1 February 2013 22:41:39 UTC-5, Joel Dice wrote:
Hi Toby,

You'll need to build against the OpenJDK class library as described in the
readme.  The default Avian class library does not yet have all the classes
and methods needed to run Scala.

Thanks for the superfast response. Sorry for not reading that first!

OpenJDK does not build on OS X PowerPC, as far as I know. Is that a showstopper or does Avian only need platform independent class files?

--Toby


 


On Fri, 1 Feb 2013, to...@telegraphics.com.au wrote:

> No such luck here on PowerPC. Any hints?
>
> thanks
> --Toby
>
> OS X 10.5.8
>
> g5:darwin-powerpc toby$ java -version
> java version "1.5.0_30"
> Java(TM) 2 Runtime Environment, Standard Edition (build
> 1.5.0_30-b03-389-9M3425)
> Java HotSpot(TM) Client VM (build 1.5.0_30-161, mixed mode, sharing)
>
>
>
> g5:darwin-powerpc toby$ gdb ./avian
> GNU gdb 6.3.50-20050815 (Apple version gdb-967) (Tue Jul 14 02:15:14 UTC
> 2009)
> Copyright 2004 Free Software Foundation, Inc.
> GDB is free software, covered by the GNU General Public License, and you are
> welcome to change it and/or distribute copies of it under certain
> conditions.
> Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB.� Type "show warranty" for details.
> This GDB was configured as "powerpc-apple-darwin"...Reading symbols for
> shared libraries ........ done
>
> vacprs/toby/Downloads/scala-2.9.2//lib/scala-library.jar
> scala.tools.nsc.interpreter.Runner -useja
> Starting program:
> /Volumes/data/Users/toby/Documents/git/avian/build/darwin-powerpc/avian -cp/Volumes/data/Users/toby/Downloads/scala-2.9.2//lib/scala-compiler.jar:/Vol
> umes/data/Users/toby/Downloads/scala-2.9.2//lib/scala-library.jar
> scala.tools.nsc.interpreter.Runner -usejavacp
> Reading symbols for shared libraries +++++++.................... done
> java/lang/NoClassDefFoundError: java/util/concurrent/locks/ReentrantLock
> � at scala/tools/nsc/interpreter/ILoopInit$class.$init$ (line 63)
> � at scala/tools/nsc/interpreter/ILoop.<init> (line 34)
> � at scala/tools/nsc/interpreter/ILoop.<init> (line 40)
> � at scala/tools/nsc/interpreter/Runner$.main (line 10)
> � at scala/tools/nsc/interpreter/Runner.main (unknown line)
>
> Program exited with code 0377.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Avian" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to avian+un...@googlegroups.com.
> To post to this group, send email to av...@googlegroups.com.
> Visit this group at http://groups.google.com/group/avian?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
> �
> �
>
>

Joel Dice

unread,
Feb 1, 2013, 10:59:20 PM2/1/13
to av...@googlegroups.com
On Fri, 1 Feb 2013, to...@telegraphics.com.au wrote:

>
>
> On Friday, 1 February 2013 22:41:39 UTC-5, Joel Dice wrote:
> Hi Toby,
>
> You'll need to build against the OpenJDK class library as
> described in the
> readme. �The default Avian class library does not yet have all
> the classes
> and methods needed to run Scala.
>
>
> Thanks for the superfast response. Sorry for not reading that first!
>
> OpenJDK does not build on OS X PowerPC, as far as I know. Is that a
> showstopper or does Avian only need platform independent class files?

It needs both the class files and the corresponding JNI code. Your best
bet is to do an openjdk-src build as described in the readme, which will
attempt to build the minimum set of JNI code from source. It's going to
have to match the class files pretty much exactly, though, so you'll need
to point Avian at the classes (e.g. rt.jar) from the same OpenJDK version
(built on another platform, perhaps). I think it's all doable, but it may
take some effort.

There's also been some discussion about supplementing the Avian library
with the Android one, but nothing's been done yet, AFAIK:

https://groups.google.com/group/avian/msg/9fb4b179cc194e46

Joel Dice

unread,
Feb 3, 2013, 4:39:43 PM2/3/13
to av...@googlegroups.com
Hi Simon,

On Tue, 29 Jan 2013, simon.och...@gmail.com wrote:

> LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64/:. \
> ./avian-dynamic -cp/home/soc/Entwicklung/scala/build/pack/lib/scala-library.jar:/home/soc/Entw
> icklung/scala/build/pack/lib/scala-reflect.jar:/home/soc/Entwicklung/scala/
> build/pack/lib/scala-compiler.jar:/home/soc/Entwicklung/scala/build/pack/li
> b/jline.jar 'scala.tools.nsc.MainGenericRunner' -usejavacp
> Welcome to Scala version 2.11.0-20130127-161738-f389f6a18f (Avian, Java
> 1.7.0_09).
> Type in expressions to have them evaluated.
> Type :help for more information.
>
> scala> object Test {
> ���� |�� private type Clearable = { def clear(): Unit }
> ���� |�� private def choke() = {
> ���� |���� try new Array[Object]((Runtime.getRuntime().maxMemory min
> Int.MaxValue).toInt)
> ���� |���� catch {
> ���� |������ case _: OutOfMemoryError => // what do you mean, out of memory?
> ���� |������ case t: Throwable => println(t)
> ���� |���� }
> ���� |�� }
> ���� |�� private def f(x: Clearable) = x.clear()
> ���� |�� class Choker(id: Int) extends Thread {
> ���� |���� private def g(iteration: Int) = {
> ���� |������ val map = scala.collection.mutable.Map[Int, Int](1 -> 2)
> ���� |������ try f(map) catch { case t: NullPointerException =>
> println(s"Failed at $id/$iteration") ; throw t }
> ���� |������ choke()
> ���� |���� }
> ���� |���� override def run() {
> ���� |������ 1 to 50 foreach g
> ���� |���� }
> ���� |�� }
> ���� |
> ���� |�� def main(args: Array[String]): Unit = {
> ���� |���� val threads = 1 to 3 map (id => new Choker(id))
> ���� |���� threads foreach (_.start())
> ���� |���� threads foreach (_.join())
> ���� |���� println("All threads completed.")
> ���� |�� }
> ���� | }
> warning: there were 1 feature warnings; re-run with -feature for details
> defined object Test
>
> scala> Test main null
> java/lang/OutOfMemoryError
> java/lang/OutOfMemoryError
> java/lang/OutOfMemoryError
> [1]��� 17650 abort (core dumped)�
> LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64/:. ./avian-dynamic -cp�� -usejavacp
> LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64/:. ./avian-dynamic -cp��
> -usejavacp� 23,18s user 2,34s system 28% cpu 1:29,30 total

I made some progress on this. I never hit the abort, but I did run into
an issue with non-ASCII characters in a field name which led to an
assertion failure in the debug build. It's possible that the same bug
caused a crash in your case with a non-debug build. Anyway, that part's
fixed:

https://github.com/ReadyTalk/avian/commit/1890e348fb7d596c75051329f5f0059c20419a8d

Now what I'm seeing is that all the threads in your test case are dying
with uncaught OutOfMemoryErrors. Obviously, OOMEs are not totally
unexpected given the nature of the test, but in this case they're being
thrown outside the try/catch block:

Breakpoint 1, vm::allocate3 (t=t@entry=0x7fffe01e5560, allocator=0x602460,
type=vm::Machine::MovableAllocation, sizeInBytes=40,
objectMask=objectMask@entry=false) at src/machine.cpp:3531
3531 throw_(t, root(t, Machine::OutOfMemoryError));
(gdb) call vmPrintTrace(t)
debug trace for thread 0x7fffe01e5560
at java/lang/Class.getDeclaredMethods0 (native)
at java/lang/Class.privateGetDeclaredMethods (line 2442)
at java/lang/Class.getMethod0 (line 2685)
at java/lang/Class.getMethod (line 1620)
at $line3/$read$$iw$$iw$Test$.reflMethod$Method1 (line 17)
at $line3/$read$$iw$$iw$Test$.$line3$$read$$iw$$iw$Test$$f (line 17)
at $line3/$read$$iw$$iw$Test$Choker.$line3$$read$$iw$$iw$Test$Choker$$g
(line 21)
at $line3/$read$$iw$$iw$Test$Choker$$anonfun$run$1.apply (line 26)
at $line3/$read$$iw$$iw$Test$Choker$$anonfun$run$1.apply (line 26)
at scala/collection/immutable/Range.foreach (line 148)
at $line3/$read$$iw$$iw$Test$Choker.run (line 26)

On Avian, at least, Class.getDeclaredMethods0 requires some amount of
memory allocation. So when there are other tests putting deliberate
pressure on the heap, it may throw an OOME. In this case, though, the
giant array allocation in the choke method should just fail immediately
without any side effects on concurrent or subsequent execution (other than
some GC activity). Somehow, the VM is getting fooled into actually
allocating that "impossible" array, and that's what causes OOMEs to be
thrown elsewhere. I'll try to find a way to address that.

The other problem is that the test never finishes because Thread.join is
not returning when the threads die. That's definitely a bug.

Joel Dice

unread,
Feb 3, 2013, 6:31:45 PM2/3/13
to Joel Dice, av...@googlegroups.com
On Sun, 3 Feb 2013, Joel Dice wrote:

> On Avian, at least, Class.getDeclaredMethods0 requires some amount of memory
> allocation. So when there are other tests putting deliberate pressure on the
> heap, it may throw an OOME. In this case, though, the giant array allocation
> in the choke method should just fail immediately without any side effects on
> concurrent or subsequent execution (other than some GC activity). Somehow,
> the VM is getting fooled into actually allocating that "impossible" array,
> and that's what causes OOMEs to be thrown elsewhere. I'll try to find a way
> to address that.
>
> The other problem is that the test never finishes because Thread.join is not
> returning when the threads die. That's definitely a bug.

OK, that's all fixed and the test passes. I'm running a full Scala "ant
test" on Avian now. It takes forever using HotSpot on my machine, so I
expect it to take forever * 4 using Avian.

Joel Dice

unread,
Feb 3, 2013, 9:45:11 PM2/3/13
to Joel Dice, av...@googlegroups.com
Well, not forever, since it crashed. Yay, core dumps.

Joel Dice

unread,
Feb 4, 2013, 3:31:00 PM2/4/13
to simon.och...@gmail.com, av...@googlegroups.com, Joel Dice
On Mon, 4 Feb 2013, simon.och...@gmail.com wrote:

> ᅵ [partest] Compiling files that are expected to build
> ᅵ [partest] testing:
> [...]/files/pos/t1937ᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵ [ᅵ OKᅵ ]
> ᅵ [partest] testing:
> [...]/files/pos/t1642ᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵ [ᅵ OKᅵ ]
> ᅵ [partest] Log file
> '/home/soc/Entwicklung/scala/test/files/pos/t1836-pos.log':
> ᅵ [partest] Possible compiler crash during test of:
> /home/soc/Entwicklung/scala/test/files/pos/t1836
> ᅵ [partest] java.lang.OutOfMemoryError
> ᅵ [partest] Log file
> '/home/soc/Entwicklung/scala/test/files/pos/t1409-pos.log':
> ᅵ [partest] Possible compiler crash during test of:
> /home/soc/Entwicklung/scala/test/files/pos/t1409
> ᅵ [partest] java.lang.OutOfMemoryError

That's really weird. Are you using the latest code from the Git repo?
The tests run slowly for me, and I've seen the process abort a few times
(which I'm debugging as I have the time), but I haven't seen any OOMEs or
StackOverflowErrors.

The only thing I can think of is that the -Xmx1536M -Xss1M arguments
aren't being used somehow. You could check that by adding some logging to
jnienv.cpp to print the heap and stack sizes used. I don't understand why
it would be different on my machine, though.

Joel Dice

unread,
Feb 4, 2013, 3:35:20 PM2/4/13
to Joel Dice, simon.och...@gmail.com, av...@googlegroups.com
Also, how exactly are you running Ant? Are you using the shell script and
setting JAVACMD, or are you running avian-dynamic directly? If the
latter, you'll need to override the default heap and stack sizes.

Joel Dice

unread,
Feb 6, 2013, 10:35:54 AM2/6/13
to simon.och...@gmail.com, av...@googlegroups.com, Joel Dice
On Mon, 4 Feb 2013, simon.och...@gmail.com wrote:

> Hi Joel,
>
> Also, how exactly are you running Ant?  Are you using the shell
> script and
> setting JAVACMD, or are you running avian-dynamic directly?  If
> the
> latter, you'll need to override the default heap and stack
> sizes.
>
>
> Yes, I'm setting  JAVACMD (as well as PATH, LD_LIBRARY_PATH and JAVA_HOME
> and renaming OpenJDK's java binary).
>
> First, I run this script, which makes the look like a valid JDK dir:
>
> AVIAN_BUILD_DIR="/home/soc/Entwicklung/avian/build/linux-x86_64-tails-conti
> nuations-openjdk/"
> JDK_DIR="/usr/lib/jvm/java-7-openjdk-amd64/"
>
> if [ -d "$AVIAN_BUILD_DIR" ]; then
>
>   if [ -d "$AVIAN_BUILD_DIR/bin" ]; then
>     rm -r "$AVIAN_BUILD_DIR/bin"
>   fi
>
>   cd "$AVIAN_BUILD_DIR"
>   mkdir bin
>   cd bin
>   ln -s ../avian-dynamic java
>   ln -s $JDK_DIR/bin/javac javac
>
> else
>   echo "Dir does not exist!"
> fi
>
> Then I export the following settings:
>
> exportLD_LIBRARY_PATH=/home/soc/Entwicklung/avian/build/linux-x86_64-tails-contin
> uations-openjdk/:/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/
> exportJAVA_HOME=/home/soc/Entwicklung/avian/build/linux-x86_64-tails-continuation
> s-openjdk
> exportJDK_HOME=/home/soc/Entwicklung/avian/build/linux-x86_64-tails-continuations
> -openjdk
> exportPATH=/home/soc/Entwicklung/avian/build/linux-x86_64-tails-continuations-ope
> njdk/bin/:$PATH
> exportJAVACMD=/home/soc/Entwicklung/avian/build/linux-x86_64-tails-continuations-
> openjdk/avian-dynamic
>
> After that, I run ant test.suite and get the errors mentioned above.

I'm going to try to reproduce this on a different machine. Meanwhile, I
recommend adding some logging to MyHeap::limitExceeded in heap.cpp. If
c.count > c.limit, print both values to find out how large the heap is
really being allowed to grow. If it's not the same as what -Xmx
specifies, something's gone wrong setting the option. Otherwise, we'll
have to look elsewhere.

Joel Dice

unread,
Feb 8, 2013, 6:37:51 PM2/8/13
to Joel Dice, simon.och...@gmail.com, av...@googlegroups.com
On Wed, 6 Feb 2013, Joel Dice wrote:

> I'm going to try to reproduce this on a different machine. Meanwhile, I
> recommend adding some logging to MyHeap::limitExceeded in heap.cpp. If
> c.count > c.limit, print both values to find out how large the heap is really
> being allowed to grow. If it's not the same as what -Xmx specifies,
> something's gone wrong setting the option. Otherwise, we'll have to look
> elsewhere.

Okay, starting from scratch on a different machine, here's what I did:

cd /build/dicej/
git clone g...@github.com:Readytalk/avian
git clone g...@github.com:scala/scala
hg clone http://hg.openjdk.java.net/jdk7u/jdk7u-dev
cd jdk7u-dev/
bash get_source.sh
unset JAVA_HOME
export LANG=C
make ALLOW_DOWNLOADS=true ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk/
cd ..
# (download Ant 1.8.3)
tar xjf /tmp/apache-ant-1.8.3-bin.tar.bz2
cd scala
cp -r /build/dicej/jdk7u-dev/build/linux-amd64/j2sdk-image /build/dicej/jdk-avian
(cd /build/dicej/avian && make strip=: openjdk=/build/dicej/jdk-avian mode=debug-fast && cp build/linux-x86_64-debug-fast-openjdk/libjvm.so ../jdk-avian/jre/lib/amd64/server/libjvm.so) && LD_LIBRARY_PATH=/build/dicej/jdk-avian/jre/lib/amd64 ionice -c 3 nice /build/dicej/jdk-avian/jre/bin/java -Xmx1536m -Xss1m -classpath /build/dicej/apache-ant-1.8.3/lib/ant-launcher.jar -Dant.home=/build/dicej/apache-ant-1.8.3 -Dant.library.dir=/build/dicej/apache-ant-1.8.3/lib org.apache.tools.ant.launch.Launcher test

It's true that Ant insists on running the "java" command when running a
fork=true task. I don't know how I convinced it to run avian-dynamic on
my other machine; maybe I was fooling myself when I thought it was.
Anyway, the above approach seems to work. Note the mode=debug-fast part,
which means it will run even more slowly than normal, but at least we'll
get an understandable core dump if it crashes.

The last command above has been running for over 48 hours on the machine
in question. It bootstrapped Scala fine and is gradually churning through
the test suite; no crashes, OutOfMemoryErrors, or StackOverflowErrors so
far.

If you're still having trouble, would you please try something like the
above sequence of commands?

Pablo Guerrero

unread,
Feb 11, 2013, 3:04:20 AM2/11/13
to av...@googlegroups.com
Hi Joel,

That sounds pretty good. Did it finish without errors? Or it's still running, xD.

Cheers,
Pablo

--
You received this message because you are subscribed to the Google Groups "Avian" group.
To unsubscribe from this group and stop receiving emails from it, send an email to avian+unsubscribe@googlegroups.com.

To post to this group, send email to av...@googlegroups.com.

Joel Dice

unread,
Feb 12, 2013, 12:56:56 PM2/12/13
to av...@googlegroups.com
On Mon, 11 Feb 2013, Pablo Guerrero wrote:

> Hi Joel,
> That sounds pretty good. Did it finish without errors? Or it's still
> running, xD.

It eventually crashed, but I've fixed the problem and am now rerunning it.

https://github.com/ReadyTalk/avian/commit/dc943c250a249f3e75614f95fca769d9ea9ba934

Joel Dice

unread,
Feb 12, 2013, 12:58:16 PM2/12/13
to simon.och...@gmail.com, av...@googlegroups.com, Joel Dice
On Tue, 12 Feb 2013, simon.och...@gmail.com wrote:

> BUILD FAILED
> /home/soc/Entwicklung/avian-build/scala/build.xml:567: null

I do remember hitting something like that, but I don't remember exactly
what the problem was. Would you please uncomment the call to printTrace
in the throw_ function in machine.h, rebuild Avian, and try again? That
will allow us to see the exception that Ant is unwilling to show us.

By the way, I recommend doing a git pull, since I fixed a bug this morning
that eventually caused the VM to crash on one of the tests:

https://github.com/ReadyTalk/avian/commit/dc943c250a249f3e75614f95fca769d9ea9ba934

Joel Dice

unread,
Feb 12, 2013, 1:25:51 PM2/12/13
to simon.och...@gmail.com, av...@googlegroups.com, Joel Dice
On Tue, 12 Feb 2013, simon.och...@gmail.com wrote:

> Could it be possible that it doesn't find javac anymore, because we unset
> Java_HOME earlier?

Yes, that's it. I forgot that I had re-exported JAVA_HOME after I built
the JDK. Sorry for the omission; that's what happens when I try to edit
all the mistakes and dead-ends out of my shell history: I end up omitting
something crucial.

Try setting JAVA_HOME to the jdk-avian directory mentioned in my previous
instructions.

Joel Dice

unread,
Feb 12, 2013, 2:50:01 PM2/12/13
to simon.och...@gmail.com, av...@googlegroups.com
> No, doesn't help.

Okay, then please let me know what you see with that printTrace call
enabled.

Joel Dice

unread,
Feb 12, 2013, 4:45:25 PM2/12/13
to av...@googlegroups.com, simon.och...@gmail.com
On Tue, 12 Feb 2013, simon.och...@gmail.com wrote:

> org/apache/tools/ant/BuildException
> ᅵ at org/apache/tools/ant/dispatch/DispatchUtils.execute (line 116)
> ᅵ at org/apache/tools/ant/Task.perform (line 348)
> ᅵ at org/apache/tools/ant/Target.execute (line 392)
> ᅵ at org/apache/tools/ant/Target.performTasks (line 413)
> ᅵ at org/apache/tools/ant/Project.executeSortedTargets (line 1399)
> ᅵ at org/apache/tools/ant/Project.executeTarget (line 1368)
> ᅵ at org/apache/tools/ant/helper/DefaultExecutor.executeTargets (line 41)
> ᅵ at org/apache/tools/ant/Project.executeTargets (line 1251)
> ᅵ at org/apache/tools/ant/Main.runBuild (line 811)
> ᅵ at org/apache/tools/ant/Main.startAnt (line 217)
> ᅵ at org/apache/tools/ant/launch/Launcher.run (line 280)
> ᅵ at org/apache/tools/ant/launch/Launcher.main (line 109)

We need to know what caused that BuildException (i.e. the exception it is
wrapping). If you can compress the log and upload it somewhere, I can
take a look.

Joel Dice

unread,
Feb 12, 2013, 6:08:53 PM2/12/13
to av...@googlegroups.com, simon.och...@gmail.com
On Tue, 12 Feb 2013, simon.och...@gmail.com wrote:

> Hello Joel,
>
>
> We need to know what caused that BuildException (i.e. the
> exception it is
> wrapping). �If you can compress the log and upload it somewhere,
> I can
> take a look.
>
>
> wow, xz managed to compress the 192 MB down to less than 100 kB. I'm
> attaching the archive.

Thanks.

This looks like at least part of the problem:

"org/apache/tools/ant/BuildException: ../jdk-avian/jre/../bin is not an
absolute path"

May I assume you set JAVA_HOME to a relative path? If so, could you
change it to an absolute path and try again?

Joel Dice

unread,
Feb 13, 2013, 1:01:10 PM2/13/13
to av...@googlegroups.com, simon.och...@gmail.com
On Wed, 13 Feb 2013, simon.och...@gmail.com wrote:

> Hi Joel,
>
> "org/apache/tools/ant/BuildException: ../jdk-avian/jre/../bin is
> not an
> absolute path"
>
> May I assume you set JAVA_HOME to a relative path? �If so, could
> you
> change it to an absolute path and try again?
>
>
> I tried that and I get the same error message, although the log is shorter
> now (18.2 MB): http://oxnrtr.de/upload/throw_log2.xz

I'm still seeing "org/apache/tools/ant/BuildException:
../jdk-avian/jre/../bin is not an absolute path" in the latest log. Are
you absolutely sure JAVA_HOME is set to an absolute path?

>
> I think there is something else wrong; this happens when I run a simple
> java:
>
> JAVA_HOME=/home/soc/Entwicklung/avian-build/jdk-avian
> LD_LIBRARY_PATH=/home/soc/Entwicklung/avian-build/jdk-avian/jre/lib/amd64
> /home/soc/Entwicklung/avian-build/jdk-avian/jre/bin/java
> java/lang/IllegalArgumentException: Unknown signal: HUP
> � at sun/misc/Signal.<init> (line 143)
> � at java/lang/Terminator.setup (line 60)
> � at java/lang/System.initializeSystemClass (line 1148)
> java/lang/IllegalArgumentException: Unknown signal: INT
> � at sun/misc/Signal.<init> (line 143)
> � at java/lang/Terminator.setup (line 64)
> � at java/lang/System.initializeSystemClass (line 1148)
> java/lang/IllegalArgumentException: Unknown signal: TERM
> � at sun/misc/Signal.<init> (line 143)
> � at java/lang/Terminator.setup (line 68)
> � at java/lang/System.initializeSystemClass (line 1148)
> java/lang/ClassNotFoundException: avian/file/Handler
> � at java/lang/Class.forName0 (native)
> � at java/lang/Class.forName (line 188)
> � at java/net/URL.getURLStreamHandler (line 1191)
> � at java/net/URL.<init> (line 411)
> � at java/net/URL.<init> (line 302)
> � at java/net/URL.<init> (line 325)
> � at sun/net/www/ParseUtil.fileToEncodedURL (line 272)
> � at sun/misc/Launcher.getFileURL (line 460)
> � at sun/misc/Launcher.pathToURLs (line 399)
> � at sun/misc/Launcher.access$300 (line 55)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 281)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 279)
> � at java/security/AccessController.doPrivileged (native)
> � at sun/misc/Launcher$AppClassLoader.getAppClassLoader (line 278)
> � at sun/misc/Launcher.<init> (line 79)
> � at sun/misc/Launcher.<clinit> (line 57)
> java/lang/ClassNotFoundException: avian/file/Handler
> � at java/lang/Class.forName0 (native)
> � at java/lang/Class.forName (line 188)
> � at java/net/URL.getURLStreamHandler (line 1191)
> � at java/net/URL.<init> (line 411)
> � at java/net/URL.<init> (line 302)
> � at java/net/URL.<init> (line 325)
> � at sun/net/www/ParseUtil.fileToEncodedURL (line 272)
> � at sun/misc/Launcher.getFileURL (line 460)
> � at sun/misc/Launcher.pathToURLs (line 399)
> � at sun/misc/Launcher.access$300 (line 55)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 281)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 279)
> � at java/security/AccessController.doPrivileged (native)
> � at sun/misc/Launcher$AppClassLoader.getAppClassLoader (line 278)
> � at sun/misc/Launcher.<init> (line 79)
> � at sun/misc/Launcher.<clinit> (line 57)
> java/lang/ClassNotFoundException: avian/file/Handler
> � at java/lang/ClassLoader.findBootstrapClass (native)
> � at java/lang/ClassLoader.findBootstrapClassOrNull (line 1061)
> � at java/lang/ClassLoader.loadClass (line 412)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/net/URL.getURLStreamHandler (line 1195)
> � at java/net/URL.<init> (line 411)
> � at java/net/URL.<init> (line 302)
> � at java/net/URL.<init> (line 325)
> � at sun/net/www/ParseUtil.fileToEncodedURL (line 272)
> � at sun/misc/Launcher.getFileURL (line 460)
> � at sun/misc/Launcher.pathToURLs (line 399)
> � at sun/misc/Launcher.access$300 (line 55)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 281)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 279)
> � at java/security/AccessController.doPrivileged (native)
> � at sun/misc/Launcher$AppClassLoader.getAppClassLoader (line 278)
> � at sun/misc/Launcher.<init> (line 79)
> � at sun/misc/Launcher.<clinit> (line 57)
> java/lang/ClassNotFoundException: avian/file/Handler
> � at java/lang/ClassLoader.findBootstrapClass (native)
> � at java/lang/ClassLoader.findBootstrapClassOrNull (line 1061)
> � at java/lang/ClassLoader.loadClass (line 412)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/net/URL.getURLStreamHandler (line 1195)
> � at java/net/URL.<init> (line 411)
> � at java/net/URL.<init> (line 302)
> � at java/net/URL.<init> (line 325)
> � at sun/net/www/ParseUtil.fileToEncodedURL (line 272)
> � at sun/misc/Launcher.getFileURL (line 460)
> � at sun/misc/Launcher.pathToURLs (line 399)
> � at sun/misc/Launcher.access$300 (line 55)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 281)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 279)
> � at java/security/AccessController.doPrivileged (native)
> � at sun/misc/Launcher$AppClassLoader.getAppClassLoader (line 278)
> � at sun/misc/Launcher.<init> (line 79)
> � at sun/misc/Launcher.<clinit> (line 57)
> java/lang/ClassNotFoundException: avian/file/Handler
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/net/URL.getURLStreamHandler (line 1195)
> � at java/net/URL.<init> (line 411)
> � at java/net/URL.<init> (line 302)
> � at java/net/URL.<init> (line 325)
> � at sun/net/www/ParseUtil.fileToEncodedURL (line 272)
> � at sun/misc/Launcher.getFileURL (line 460)
> � at sun/misc/Launcher.pathToURLs (line 399)
> � at sun/misc/Launcher.access$300 (line 55)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 281)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 279)
> � at java/security/AccessController.doPrivileged (native)
> � at sun/misc/Launcher$AppClassLoader.getAppClassLoader (line 278)
> � at sun/misc/Launcher.<init> (line 79)
> � at sun/misc/Launcher.<clinit> (line 57)
> java/lang/ClassNotFoundException: avian/file/Handler
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/net/URL.getURLStreamHandler (line 1195)
> � at java/net/URL.<init> (line 411)
> � at java/net/URL.<init> (line 302)
> � at java/net/URL.<init> (line 325)
> � at sun/net/www/ParseUtil.fileToEncodedURL (line 272)
> � at sun/misc/Launcher.getFileURL (line 460)
> � at sun/misc/Launcher.pathToURLs (line 399)
> � at sun/misc/Launcher.access$300 (line 55)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 281)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 279)
> � at java/security/AccessController.doPrivileged (native)
> � at sun/misc/Launcher$AppClassLoader.getAppClassLoader (line 278)
> � at sun/misc/Launcher.<init> (line 79)
> � at sun/misc/Launcher.<clinit> (line 57)
> java/lang/ClassNotFoundException: avian/file/Handler
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/net/URL.getURLStreamHandler (line 1195)
> � at java/net/URL.<init> (line 411)
> � at java/net/URL.<init> (line 302)
> � at java/net/URL.<init> (line 325)
> � at sun/net/www/ParseUtil.fileToEncodedURL (line 272)
> � at sun/misc/Launcher.getFileURL (line 460)
> � at sun/misc/Launcher.pathToURLs (line 399)
> � at sun/misc/Launcher.access$300 (line 55)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 281)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 279)
> � at java/security/AccessController.doPrivileged (native)
> � at sun/misc/Launcher$AppClassLoader.getAppClassLoader (line 278)
> � at sun/misc/Launcher.<init> (line 79)
> � at sun/misc/Launcher.<clinit> (line 57)
> java/lang/ClassNotFoundException: avian/file/Handler
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/net/URL.getURLStreamHandler (line 1195)
> � at java/net/URL.<init> (line 411)
> � at java/net/URL.<init> (line 302)
> � at java/net/URL.<init> (line 325)
> � at sun/net/www/ParseUtil.fileToEncodedURL (line 272)
> � at sun/misc/Launcher.getFileURL (line 460)
> � at sun/misc/Launcher.pathToURLs (line 399)
> � at sun/misc/Launcher.access$300 (line 55)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 281)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 279)
> � at java/security/AccessController.doPrivileged (native)
> � at sun/misc/Launcher$AppClassLoader.getAppClassLoader (line 278)
> � at sun/misc/Launcher.<init> (line 79)
> � at sun/misc/Launcher.<clinit> (line 57)
> java/lang/ClassNotFoundException: sun/launcher/resources/launcher_de_DE
> � at java/lang/ClassLoader.findBootstrapClass (native)
> � at java/lang/ClassLoader.findBootstrapClassOrNull (line 1061)
> � at java/lang/ClassLoader.loadClass (line 412)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/util/ResourceBundle$Control.newBundle (line 2565)
> � at java/util/ResourceBundle.loadBundle (line 1436)
> � at java/util/ResourceBundle.findBundle (line 1400)
> � at java/util/ResourceBundle.getBundleImpl (line 1296)
> � at java/util/ResourceBundle.getBundle (line 724)
> � at sun/launcher/LauncherHelper$ResourceBundleHolder.<clinit> (line 87)
> � at sun/launcher/LauncherHelper.getLocalizedMessage (line 316)
> � at sun/launcher/LauncherHelper.initHelpMessage (line 328)
> java/lang/ClassNotFoundException: sun/launcher/resources/launcher_de_DE
> � at java/lang/ClassLoader.findBootstrapClass (native)
> � at java/lang/ClassLoader.findBootstrapClassOrNull (line 1061)
> � at java/lang/ClassLoader.loadClass (line 412)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/util/ResourceBundle$Control.newBundle (line 2565)
> � at java/util/ResourceBundle.loadBundle (line 1436)
> � at java/util/ResourceBundle.findBundle (line 1400)
> � at java/util/ResourceBundle.getBundleImpl (line 1296)
> � at java/util/ResourceBundle.getBundle (line 724)
> � at sun/launcher/LauncherHelper$ResourceBundleHolder.<clinit> (line 87)
> � at sun/launcher/LauncherHelper.getLocalizedMessage (line 316)
> � at sun/launcher/LauncherHelper.initHelpMessage (line 328)
> java/lang/ClassNotFoundException: sun/launcher/resources/launcher_de_DE
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/util/ResourceBundle$Control.newBundle (line 2565)
> � at java/util/ResourceBundle.loadBundle (line 1436)
> � at java/util/ResourceBundle.findBundle (line 1400)
> � at java/util/ResourceBundle.getBundleImpl (line 1296)
> � at java/util/ResourceBundle.getBundle (line 724)
> � at sun/launcher/LauncherHelper$ResourceBundleHolder.<clinit> (line 87)
> � at sun/launcher/LauncherHelper.getLocalizedMessage (line 316)
> � at sun/launcher/LauncherHelper.initHelpMessage (line 328)
> java/lang/ClassNotFoundException: sun/launcher/resources/launcher_de_DE
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/util/ResourceBundle$Control.newBundle (line 2565)
> � at java/util/ResourceBundle.loadBundle (line 1436)
> � at java/util/ResourceBundle.findBundle (line 1400)
> � at java/util/ResourceBundle.getBundleImpl (line 1296)
> � at java/util/ResourceBundle.getBundle (line 724)
> � at sun/launcher/LauncherHelper$ResourceBundleHolder.<clinit> (line 87)
> � at sun/launcher/LauncherHelper.getLocalizedMessage (line 316)
> � at sun/launcher/LauncherHelper.initHelpMessage (line 328)
> Verwendung: java [-options] class [args...]
> ���������� (zur Ausf?hrung einer Klasse)
> �� oder� java [-options] -jar jarfile [args...]
> ���������� (zur Ausf?hrung einer JAR-Datei)
> wobei options Folgendes umfasst:
> ��� -d32��� � Verwendet ein 32-Bit-Datenmodell, sofern verf?gbar
> ��� -d64��� � Verwendet ein 64-Bit-Datenmodell, sofern verf?gbar
> ��� -server��� � zur Auswahl der "server" VM
> ����������������� Die Standard-VM ist server,
> ����������������� weil die Ausf?hrung auf einem Server-Class-Rechner
> erfolgt.
>
>
> ��� -cp <Class-Suchpfad von Verzeichnissen und .zip-/.jar-Dateien>
> ��� -classpath <Class-Suchpfad von Verzeichnissen und .zip-/.jar-Dateien>
> ����������������� Eine durch : getrennte Liste mit Verzeichnissen,
> .jar-Archiven
> ����������������� und .zip-Archiven zur Suche nach Klassendateien.
> ��� -D<name>=<value>
> ����������������� Setzt eine Systemeigenschaft
> ��� -verbose[:class|gc|jni]
> ����������������� Aktiviert die Verbose-Ausgabe
> ��� -version����� Druckt Produktversion und beendet das Programm
> ��� -version:<value>
> ����������������� Erfordert die angegebene Version zur Ausf?hrung
> ��� -showversion� Druckt Produktversion und f?hrt fort
> ��� -jre-restrict-search | -no-jre-restrict-search
> ����������������� Bezieht private JREs des Benutzers in Versionssuche ein
> bzw. schlie?t sie aus
> ��� -? -help����� Druckt diese Hilfemeldung
> ��� -X����������� Druckt Hilfe zu Nicht-Standardoptionen
> ��� -ea[:<packagename>...|:<classname>]
> ��� -enableassertions[:<packagename>...|:<classname>]
> ����������������� Aktiviert Assertionen mit angegebener Granularit?t
> ��� -da[:<packagename>...|:<classname>]
> ��� -disableassertions[:<packagename>...|:<classname>]
> ����������������� Deaktiviert Assertionen mit angegebener Granularit?t
> ��� -esa | -enablesystemassertions
> ����������������� Aktiviert Systemassertionen
> ��� -dsa | -disablesystemassertions
> ����������������� Deaktiviert Systemassertionen
> ��� -agentlib:<libname>[=<options>]
> ����������������� L?dt native Agent Library <libname>, z.B. -agentlib:hprof
> ����������������� siehe auch, -agentlib:jdwp=help und -agentlib:hprof=help
> ��� -agentpath:<pathname>[=<options>]
> ����������������� L?dt native Agent Library nach vollem Pfadnamen
> ��� -javaagent:<jarpath>[=<options>]
> ����������������� L?dt Java-Programmiersprachen-Agent, siehe
> java.lang.instrument
> ��� -splash:<imagepath>
> ����������������� Zeigt Startbildschirm mit angegebenem Bild
> Weitere Einzelheiten finden Sie unter http://java.sun.com/javase/reference.
> java/lang/Throwable
> java/lang/Throwable
> java/lang/Throwable
> java/lang/Throwable
>
> ... and javac:
>
> JAVA_HOME=/home/soc/Entwicklung/avian-build/jdk-avian
> LD_LIBRARY_PATH=/home/soc/Entwicklung/avian-build/jdk-avian/jre/lib/amd64
> /home/soc/Entwicklung/avian-build/jdk-avian/bin/javac
> java/lang/IllegalArgumentException: Unknown signal: HUP
> � at sun/misc/Signal.<init> (line 143)
> � at java/lang/Terminator.setup (line 60)
> � at java/lang/System.initializeSystemClass (line 1148)
> java/lang/IllegalArgumentException: Unknown signal: INT
> � at sun/misc/Signal.<init> (line 143)
> � at java/lang/Terminator.setup (line 64)
> � at java/lang/System.initializeSystemClass (line 1148)
> java/lang/IllegalArgumentException: Unknown signal: TERM
> � at sun/misc/Signal.<init> (line 143)
> � at java/lang/Terminator.setup (line 68)
> � at java/lang/System.initializeSystemClass (line 1148)
> java/lang/ClassNotFoundException: avian/file/Handler
> � at java/lang/Class.forName0 (native)
> � at java/lang/Class.forName (line 188)
> � at java/net/URL.getURLStreamHandler (line 1191)
> � at java/net/URL.<init> (line 411)
> � at java/net/URL.<init> (line 302)
> � at java/net/URL.<init> (line 325)
> � at sun/net/www/ParseUtil.fileToEncodedURL (line 272)
> � at sun/misc/Launcher.getFileURL (line 460)
> � at sun/misc/Launcher.pathToURLs (line 399)
> � at sun/misc/Launcher.access$300 (line 55)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 281)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 279)
> � at java/security/AccessController.doPrivileged (native)
> � at sun/misc/Launcher$AppClassLoader.getAppClassLoader (line 278)
> � at sun/misc/Launcher.<init> (line 79)
> � at sun/misc/Launcher.<clinit> (line 57)
> java/lang/ClassNotFoundException: avian/file/Handler
> � at java/lang/Class.forName0 (native)
> � at java/lang/Class.forName (line 188)
> � at java/net/URL.getURLStreamHandler (line 1191)
> � at java/net/URL.<init> (line 411)
> � at java/net/URL.<init> (line 302)
> � at java/net/URL.<init> (line 325)
> � at sun/net/www/ParseUtil.fileToEncodedURL (line 272)
> � at sun/misc/Launcher.getFileURL (line 460)
> � at sun/misc/Launcher.pathToURLs (line 399)
> � at sun/misc/Launcher.access$300 (line 55)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 281)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 279)
> � at java/security/AccessController.doPrivileged (native)
> � at sun/misc/Launcher$AppClassLoader.getAppClassLoader (line 278)
> � at sun/misc/Launcher.<init> (line 79)
> � at sun/misc/Launcher.<clinit> (line 57)
> java/lang/ClassNotFoundException: avian/file/Handler
> � at java/lang/ClassLoader.findBootstrapClass (native)
> � at java/lang/ClassLoader.findBootstrapClassOrNull (line 1061)
> � at java/lang/ClassLoader.loadClass (line 412)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/net/URL.getURLStreamHandler (line 1195)
> � at java/net/URL.<init> (line 411)
> � at java/net/URL.<init> (line 302)
> � at java/net/URL.<init> (line 325)
> � at sun/net/www/ParseUtil.fileToEncodedURL (line 272)
> � at sun/misc/Launcher.getFileURL (line 460)
> � at sun/misc/Launcher.pathToURLs (line 399)
> � at sun/misc/Launcher.access$300 (line 55)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 281)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 279)
> � at java/security/AccessController.doPrivileged (native)
> � at sun/misc/Launcher$AppClassLoader.getAppClassLoader (line 278)
> � at sun/misc/Launcher.<init> (line 79)
> � at sun/misc/Launcher.<clinit> (line 57)
> java/lang/ClassNotFoundException: avian/file/Handler
> � at java/lang/ClassLoader.findBootstrapClass (native)
> � at java/lang/ClassLoader.findBootstrapClassOrNull (line 1061)
> � at java/lang/ClassLoader.loadClass (line 412)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/net/URL.getURLStreamHandler (line 1195)
> � at java/net/URL.<init> (line 411)
> � at java/net/URL.<init> (line 302)
> � at java/net/URL.<init> (line 325)
> � at sun/net/www/ParseUtil.fileToEncodedURL (line 272)
> � at sun/misc/Launcher.getFileURL (line 460)
> � at sun/misc/Launcher.pathToURLs (line 399)
> � at sun/misc/Launcher.access$300 (line 55)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 281)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 279)
> � at java/security/AccessController.doPrivileged (native)
> � at sun/misc/Launcher$AppClassLoader.getAppClassLoader (line 278)
> � at sun/misc/Launcher.<init> (line 79)
> � at sun/misc/Launcher.<clinit> (line 57)
> java/lang/ClassNotFoundException: avian/file/Handler
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/net/URL.getURLStreamHandler (line 1195)
> � at java/net/URL.<init> (line 411)
> � at java/net/URL.<init> (line 302)
> � at java/net/URL.<init> (line 325)
> � at sun/net/www/ParseUtil.fileToEncodedURL (line 272)
> � at sun/misc/Launcher.getFileURL (line 460)
> � at sun/misc/Launcher.pathToURLs (line 399)
> � at sun/misc/Launcher.access$300 (line 55)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 281)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 279)
> � at java/security/AccessController.doPrivileged (native)
> � at sun/misc/Launcher$AppClassLoader.getAppClassLoader (line 278)
> � at sun/misc/Launcher.<init> (line 79)
> � at sun/misc/Launcher.<clinit> (line 57)
> java/lang/ClassNotFoundException: avian/file/Handler
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/net/URL.getURLStreamHandler (line 1195)
> � at java/net/URL.<init> (line 411)
> � at java/net/URL.<init> (line 302)
> � at java/net/URL.<init> (line 325)
> � at sun/net/www/ParseUtil.fileToEncodedURL (line 272)
> � at sun/misc/Launcher.getFileURL (line 460)
> � at sun/misc/Launcher.pathToURLs (line 399)
> � at sun/misc/Launcher.access$300 (line 55)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 281)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 279)
> � at java/security/AccessController.doPrivileged (native)
> � at sun/misc/Launcher$AppClassLoader.getAppClassLoader (line 278)
> � at sun/misc/Launcher.<init> (line 79)
> � at sun/misc/Launcher.<clinit> (line 57)
> java/lang/ClassNotFoundException: avian/file/Handler
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/net/URL.getURLStreamHandler (line 1195)
> � at java/net/URL.<init> (line 411)
> � at java/net/URL.<init> (line 302)
> � at java/net/URL.<init> (line 325)
> � at sun/net/www/ParseUtil.fileToEncodedURL (line 272)
> � at sun/misc/Launcher.getFileURL (line 460)
> � at sun/misc/Launcher.pathToURLs (line 399)
> � at sun/misc/Launcher.access$300 (line 55)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 281)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 279)
> � at java/security/AccessController.doPrivileged (native)
> � at sun/misc/Launcher$AppClassLoader.getAppClassLoader (line 278)
> � at sun/misc/Launcher.<init> (line 79)
> � at sun/misc/Launcher.<clinit> (line 57)
> java/lang/ClassNotFoundException: avian/file/Handler
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/net/URL.getURLStreamHandler (line 1195)
> � at java/net/URL.<init> (line 411)
> � at java/net/URL.<init> (line 302)
> � at java/net/URL.<init> (line 325)
> � at sun/net/www/ParseUtil.fileToEncodedURL (line 272)
> � at sun/misc/Launcher.getFileURL (line 460)
> � at sun/misc/Launcher.pathToURLs (line 399)
> � at sun/misc/Launcher.access$300 (line 55)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 281)
> � at sun/misc/Launcher$AppClassLoader$1.run (line 279)
> � at java/security/AccessController.doPrivileged (native)
> � at sun/misc/Launcher$AppClassLoader.getAppClassLoader (line 278)
> � at sun/misc/Launcher.<init> (line 79)
> � at sun/misc/Launcher.<clinit> (line 57)
> java/lang/ClassNotFoundException: com/sun/tools/javac/Main
> � at java/lang/ClassLoader.findBootstrapClass (native)
> � at java/lang/ClassLoader.findBootstrapClassOrNull (line 1061)
> � at java/lang/ClassLoader.loadClass (line 412)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at sun/launcher/LauncherHelper.checkAndLoadMain (line 482)
> java/lang/ClassNotFoundException: com/sun/tools/javac/Main
> � at java/lang/ClassLoader.findBootstrapClass (native)
> � at java/lang/ClassLoader.findBootstrapClassOrNull (line 1061)
> � at java/lang/ClassLoader.loadClass (line 412)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at sun/launcher/LauncherHelper.checkAndLoadMain (line 482)
> java/lang/ClassNotFoundException: com/sun/tools/javac/Main
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at sun/launcher/LauncherHelper.checkAndLoadMain (line 482)
> java/lang/ClassNotFoundException: com/sun/tools/javac/Main
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at sun/launcher/LauncherHelper.checkAndLoadMain (line 482)
> java/lang/ClassNotFoundException: com/sun/tools/javac/resources/javac
> � at java/lang/ClassLoader.findBootstrapClass (native)
> � at java/lang/ClassLoader.findBootstrapClassOrNull (line 1061)
> � at java/lang/ClassLoader.loadClass (line 412)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/util/ResourceBundle$Control.newBundle (line 2565)
> � at java/util/ResourceBundle.loadBundle (line 1436)
> � at java/util/ResourceBundle.findBundle (line 1400)
> � at java/util/ResourceBundle.findBundle (line 1354)
> � at java/util/ResourceBundle.findBundle (line 1354)
> � at java/util/ResourceBundle.getBundleImpl (line 1296)
> � at java/util/ResourceBundle.getBundle (line 796)
> � at com/sun/tools/javac/util/JavacMessages.getBundles (line 121)
> � at com/sun/tools/javac/util/JavacMessages.setCurrentLocale (line 73)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 98)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 88)
> � at com/sun/tools/javac/main/Main.getLocalizedString (line 584)
> � at com/sun/tools/javac/main/Main.help (line 151)
> � at com/sun/tools/javac/main/Main.compile (line 377)
> � at com/sun/tools/javac/main/Main.compile (line 353)
> � at com/sun/tools/javac/main/Main.compile (line 342)
> � at com/sun/tools/javac/main/Main.compile (line 333)
> � at com/sun/tools/javac/Main.compile (line 76)
> � at com/sun/tools/javac/Main.main (line 61)
> java/lang/ClassNotFoundException: com/sun/tools/javac/resources/javac
> � at java/lang/ClassLoader.findBootstrapClass (native)
> � at java/lang/ClassLoader.findBootstrapClassOrNull (line 1061)
> � at java/lang/ClassLoader.loadClass (line 412)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/util/ResourceBundle$Control.newBundle (line 2565)
> � at java/util/ResourceBundle.loadBundle (line 1436)
> � at java/util/ResourceBundle.findBundle (line 1400)
> � at java/util/ResourceBundle.findBundle (line 1354)
> � at java/util/ResourceBundle.findBundle (line 1354)
> � at java/util/ResourceBundle.getBundleImpl (line 1296)
> � at java/util/ResourceBundle.getBundle (line 796)
> � at com/sun/tools/javac/util/JavacMessages.getBundles (line 121)
> � at com/sun/tools/javac/util/JavacMessages.setCurrentLocale (line 73)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 98)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 88)
> � at com/sun/tools/javac/main/Main.getLocalizedString (line 584)
> � at com/sun/tools/javac/main/Main.help (line 151)
> � at com/sun/tools/javac/main/Main.compile (line 377)
> � at com/sun/tools/javac/main/Main.compile (line 353)
> � at com/sun/tools/javac/main/Main.compile (line 342)
> � at com/sun/tools/javac/main/Main.compile (line 333)
> � at com/sun/tools/javac/Main.compile (line 76)
> � at com/sun/tools/javac/Main.main (line 61)
> java/lang/ClassNotFoundException: com/sun/tools/javac/resources/javac
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/util/ResourceBundle$Control.newBundle (line 2565)
> � at java/util/ResourceBundle.loadBundle (line 1436)
> � at java/util/ResourceBundle.findBundle (line 1400)
> � at java/util/ResourceBundle.findBundle (line 1354)
> � at java/util/ResourceBundle.findBundle (line 1354)
> � at java/util/ResourceBundle.getBundleImpl (line 1296)
> � at java/util/ResourceBundle.getBundle (line 796)
> � at com/sun/tools/javac/util/JavacMessages.getBundles (line 121)
> � at com/sun/tools/javac/util/JavacMessages.setCurrentLocale (line 73)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 98)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 88)
> � at com/sun/tools/javac/main/Main.getLocalizedString (line 584)
> � at com/sun/tools/javac/main/Main.help (line 151)
> � at com/sun/tools/javac/main/Main.compile (line 377)
> � at com/sun/tools/javac/main/Main.compile (line 353)
> � at com/sun/tools/javac/main/Main.compile (line 342)
> � at com/sun/tools/javac/main/Main.compile (line 333)
> � at com/sun/tools/javac/Main.compile (line 76)
> � at com/sun/tools/javac/Main.main (line 61)
> java/lang/ClassNotFoundException: com/sun/tools/javac/resources/javac
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/util/ResourceBundle$Control.newBundle (line 2565)
> � at java/util/ResourceBundle.loadBundle (line 1436)
> � at java/util/ResourceBundle.findBundle (line 1400)
> � at java/util/ResourceBundle.findBundle (line 1354)
> � at java/util/ResourceBundle.findBundle (line 1354)
> � at java/util/ResourceBundle.getBundleImpl (line 1296)
> � at java/util/ResourceBundle.getBundle (line 796)
> � at com/sun/tools/javac/util/JavacMessages.getBundles (line 121)
> � at com/sun/tools/javac/util/JavacMessages.setCurrentLocale (line 73)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 98)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 88)
> � at com/sun/tools/javac/main/Main.getLocalizedString (line 584)
> � at com/sun/tools/javac/main/Main.help (line 151)
> � at com/sun/tools/javac/main/Main.compile (line 377)
> � at com/sun/tools/javac/main/Main.compile (line 353)
> � at com/sun/tools/javac/main/Main.compile (line 342)
> � at com/sun/tools/javac/main/Main.compile (line 333)
> � at com/sun/tools/javac/Main.compile (line 76)
> � at com/sun/tools/javac/Main.main (line 61)
> java/lang/ClassNotFoundException: com/sun/tools/javac/resources/javac_de
> � at java/lang/ClassLoader.findBootstrapClass (native)
> � at java/lang/ClassLoader.findBootstrapClassOrNull (line 1061)
> � at java/lang/ClassLoader.loadClass (line 412)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/util/ResourceBundle$Control.newBundle (line 2565)
> � at java/util/ResourceBundle.loadBundle (line 1436)
> � at java/util/ResourceBundle.findBundle (line 1400)
> � at java/util/ResourceBundle.findBundle (line 1354)
> � at java/util/ResourceBundle.getBundleImpl (line 1296)
> � at java/util/ResourceBundle.getBundle (line 796)
> � at com/sun/tools/javac/util/JavacMessages.getBundles (line 121)
> � at com/sun/tools/javac/util/JavacMessages.setCurrentLocale (line 73)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 98)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 88)
> � at com/sun/tools/javac/main/Main.getLocalizedString (line 584)
> � at com/sun/tools/javac/main/Main.help (line 151)
> � at com/sun/tools/javac/main/Main.compile (line 377)
> � at com/sun/tools/javac/main/Main.compile (line 353)
> � at com/sun/tools/javac/main/Main.compile (line 342)
> � at com/sun/tools/javac/main/Main.compile (line 333)
> � at com/sun/tools/javac/Main.compile (line 76)
> � at com/sun/tools/javac/Main.main (line 61)
> java/lang/ClassNotFoundException: com/sun/tools/javac/resources/javac_de
> � at java/lang/ClassLoader.findBootstrapClass (native)
> � at java/lang/ClassLoader.findBootstrapClassOrNull (line 1061)
> � at java/lang/ClassLoader.loadClass (line 412)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/util/ResourceBundle$Control.newBundle (line 2565)
> � at java/util/ResourceBundle.loadBundle (line 1436)
> � at java/util/ResourceBundle.findBundle (line 1400)
> � at java/util/ResourceBundle.findBundle (line 1354)
> � at java/util/ResourceBundle.getBundleImpl (line 1296)
> � at java/util/ResourceBundle.getBundle (line 796)
> � at com/sun/tools/javac/util/JavacMessages.getBundles (line 121)
> � at com/sun/tools/javac/util/JavacMessages.setCurrentLocale (line 73)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 98)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 88)
> � at com/sun/tools/javac/main/Main.getLocalizedString (line 584)
> � at com/sun/tools/javac/main/Main.help (line 151)
> � at com/sun/tools/javac/main/Main.compile (line 377)
> � at com/sun/tools/javac/main/Main.compile (line 353)
> � at com/sun/tools/javac/main/Main.compile (line 342)
> � at com/sun/tools/javac/main/Main.compile (line 333)
> � at com/sun/tools/javac/Main.compile (line 76)
> � at com/sun/tools/javac/Main.main (line 61)
> java/lang/ClassNotFoundException: com/sun/tools/javac/resources/javac_de
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/util/ResourceBundle$Control.newBundle (line 2565)
> � at java/util/ResourceBundle.loadBundle (line 1436)
> � at java/util/ResourceBundle.findBundle (line 1400)
> � at java/util/ResourceBundle.findBundle (line 1354)
> � at java/util/ResourceBundle.getBundleImpl (line 1296)
> � at java/util/ResourceBundle.getBundle (line 796)
> � at com/sun/tools/javac/util/JavacMessages.getBundles (line 121)
> � at com/sun/tools/javac/util/JavacMessages.setCurrentLocale (line 73)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 98)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 88)
> � at com/sun/tools/javac/main/Main.getLocalizedString (line 584)
> � at com/sun/tools/javac/main/Main.help (line 151)
> � at com/sun/tools/javac/main/Main.compile (line 377)
> � at com/sun/tools/javac/main/Main.compile (line 353)
> � at com/sun/tools/javac/main/Main.compile (line 342)
> � at com/sun/tools/javac/main/Main.compile (line 333)
> � at com/sun/tools/javac/Main.compile (line 76)
> � at com/sun/tools/javac/Main.main (line 61)
> java/lang/ClassNotFoundException: com/sun/tools/javac/resources/javac_de
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/util/ResourceBundle$Control.newBundle (line 2565)
> � at java/util/ResourceBundle.loadBundle (line 1436)
> � at java/util/ResourceBundle.findBundle (line 1400)
> � at java/util/ResourceBundle.findBundle (line 1354)
> � at java/util/ResourceBundle.getBundleImpl (line 1296)
> � at java/util/ResourceBundle.getBundle (line 796)
> � at com/sun/tools/javac/util/JavacMessages.getBundles (line 121)
> � at com/sun/tools/javac/util/JavacMessages.setCurrentLocale (line 73)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 98)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 88)
> � at com/sun/tools/javac/main/Main.getLocalizedString (line 584)
> � at com/sun/tools/javac/main/Main.help (line 151)
> � at com/sun/tools/javac/main/Main.compile (line 377)
> � at com/sun/tools/javac/main/Main.compile (line 353)
> � at com/sun/tools/javac/main/Main.compile (line 342)
> � at com/sun/tools/javac/main/Main.compile (line 333)
> � at com/sun/tools/javac/Main.compile (line 76)
> � at com/sun/tools/javac/Main.main (line 61)
> java/lang/ClassNotFoundException: com/sun/tools/javac/resources/javac_de
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/util/ResourceBundle$Control.newBundle (line 2565)
> � at java/util/ResourceBundle.loadBundle (line 1436)
> � at java/util/ResourceBundle.findBundle (line 1400)
> � at java/util/ResourceBundle.findBundle (line 1354)
> � at java/util/ResourceBundle.getBundleImpl (line 1296)
> � at java/util/ResourceBundle.getBundle (line 796)
> � at com/sun/tools/javac/util/JavacMessages.getBundles (line 121)
> � at com/sun/tools/javac/util/JavacMessages.setCurrentLocale (line 73)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 98)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 88)
> � at com/sun/tools/javac/main/Main.getLocalizedString (line 584)
> � at com/sun/tools/javac/main/Main.help (line 151)
> � at com/sun/tools/javac/main/Main.compile (line 377)
> � at com/sun/tools/javac/main/Main.compile (line 353)
> � at com/sun/tools/javac/main/Main.compile (line 342)
> � at com/sun/tools/javac/main/Main.compile (line 333)
> � at com/sun/tools/javac/Main.compile (line 76)
> � at com/sun/tools/javac/Main.main (line 61)
> java/lang/ClassNotFoundException: com/sun/tools/javac/resources/javac_de
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/util/ResourceBundle$Control.newBundle (line 2565)
> � at java/util/ResourceBundle.loadBundle (line 1436)
> � at java/util/ResourceBundle.findBundle (line 1400)
> � at java/util/ResourceBundle.findBundle (line 1354)
> � at java/util/ResourceBundle.getBundleImpl (line 1296)
> � at java/util/ResourceBundle.getBundle (line 796)
> � at com/sun/tools/javac/util/JavacMessages.getBundles (line 121)
> � at com/sun/tools/javac/util/JavacMessages.setCurrentLocale (line 73)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 98)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 88)
> � at com/sun/tools/javac/main/Main.getLocalizedString (line 584)
> � at com/sun/tools/javac/main/Main.help (line 151)
> � at com/sun/tools/javac/main/Main.compile (line 377)
> � at com/sun/tools/javac/main/Main.compile (line 353)
> � at com/sun/tools/javac/main/Main.compile (line 342)
> � at com/sun/tools/javac/main/Main.compile (line 333)
> � at com/sun/tools/javac/Main.compile (line 76)
> � at com/sun/tools/javac/Main.main (line 61)
> java/lang/ClassNotFoundException: com/sun/tools/javac/resources/javac_de_DE
> � at java/lang/ClassLoader.findBootstrapClass (native)
> � at java/lang/ClassLoader.findBootstrapClassOrNull (line 1061)
> � at java/lang/ClassLoader.loadClass (line 412)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/util/ResourceBundle$Control.newBundle (line 2565)
> � at java/util/ResourceBundle.loadBundle (line 1436)
> � at java/util/ResourceBundle.findBundle (line 1400)
> � at java/util/ResourceBundle.getBundleImpl (line 1296)
> � at java/util/ResourceBundle.getBundle (line 796)
> � at com/sun/tools/javac/util/JavacMessages.getBundles (line 121)
> � at com/sun/tools/javac/util/JavacMessages.setCurrentLocale (line 73)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 98)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 88)
> � at com/sun/tools/javac/main/Main.getLocalizedString (line 584)
> � at com/sun/tools/javac/main/Main.help (line 151)
> � at com/sun/tools/javac/main/Main.compile (line 377)
> � at com/sun/tools/javac/main/Main.compile (line 353)
> � at com/sun/tools/javac/main/Main.compile (line 342)
> � at com/sun/tools/javac/main/Main.compile (line 333)
> � at com/sun/tools/javac/Main.compile (line 76)
> � at com/sun/tools/javac/Main.main (line 61)
> java/lang/ClassNotFoundException: com/sun/tools/javac/resources/javac_de_DE
> � at java/lang/ClassLoader.findBootstrapClass (native)
> � at java/lang/ClassLoader.findBootstrapClassOrNull (line 1061)
> � at java/lang/ClassLoader.loadClass (line 412)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/util/ResourceBundle$Control.newBundle (line 2565)
> � at java/util/ResourceBundle.loadBundle (line 1436)
> � at java/util/ResourceBundle.findBundle (line 1400)
> � at java/util/ResourceBundle.getBundleImpl (line 1296)
> � at java/util/ResourceBundle.getBundle (line 796)
> � at com/sun/tools/javac/util/JavacMessages.getBundles (line 121)
> � at com/sun/tools/javac/util/JavacMessages.setCurrentLocale (line 73)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 98)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 88)
> � at com/sun/tools/javac/main/Main.getLocalizedString (line 584)
> � at com/sun/tools/javac/main/Main.help (line 151)
> � at com/sun/tools/javac/main/Main.compile (line 377)
> � at com/sun/tools/javac/main/Main.compile (line 353)
> � at com/sun/tools/javac/main/Main.compile (line 342)
> � at com/sun/tools/javac/main/Main.compile (line 333)
> � at com/sun/tools/javac/Main.compile (line 76)
> � at com/sun/tools/javac/Main.main (line 61)
> java/lang/ClassNotFoundException: com/sun/tools/javac/resources/javac_de_DE
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/util/ResourceBundle$Control.newBundle (line 2565)
> � at java/util/ResourceBundle.loadBundle (line 1436)
> � at java/util/ResourceBundle.findBundle (line 1400)
> � at java/util/ResourceBundle.getBundleImpl (line 1296)
> � at java/util/ResourceBundle.getBundle (line 796)
> � at com/sun/tools/javac/util/JavacMessages.getBundles (line 121)
> � at com/sun/tools/javac/util/JavacMessages.setCurrentLocale (line 73)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 98)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 88)
> � at com/sun/tools/javac/main/Main.getLocalizedString (line 584)
> � at com/sun/tools/javac/main/Main.help (line 151)
> � at com/sun/tools/javac/main/Main.compile (line 377)
> � at com/sun/tools/javac/main/Main.compile (line 353)
> � at com/sun/tools/javac/main/Main.compile (line 342)
> � at com/sun/tools/javac/main/Main.compile (line 333)
> � at com/sun/tools/javac/Main.compile (line 76)
> � at com/sun/tools/javac/Main.main (line 61)
> java/lang/ClassNotFoundException: com/sun/tools/javac/resources/javac_de_DE
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 410)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/util/ResourceBundle$Control.newBundle (line 2565)
> � at java/util/ResourceBundle.loadBundle (line 1436)
> � at java/util/ResourceBundle.findBundle (line 1400)
> � at java/util/ResourceBundle.getBundleImpl (line 1296)
> � at java/util/ResourceBundle.getBundle (line 796)
> � at com/sun/tools/javac/util/JavacMessages.getBundles (line 121)
> � at com/sun/tools/javac/util/JavacMessages.setCurrentLocale (line 73)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 98)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 88)
> � at com/sun/tools/javac/main/Main.getLocalizedString (line 584)
> � at com/sun/tools/javac/main/Main.help (line 151)
> � at com/sun/tools/javac/main/Main.compile (line 377)
> � at com/sun/tools/javac/main/Main.compile (line 353)
> � at com/sun/tools/javac/main/Main.compile (line 342)
> � at com/sun/tools/javac/main/Main.compile (line 333)
> � at com/sun/tools/javac/Main.compile (line 76)
> � at com/sun/tools/javac/Main.main (line 61)
> java/lang/ClassNotFoundException: com/sun/tools/javac/resources/javac_de_DE
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/util/ResourceBundle$Control.newBundle (line 2565)
> � at java/util/ResourceBundle.loadBundle (line 1436)
> � at java/util/ResourceBundle.findBundle (line 1400)
> � at java/util/ResourceBundle.getBundleImpl (line 1296)
> � at java/util/ResourceBundle.getBundle (line 796)
> � at com/sun/tools/javac/util/JavacMessages.getBundles (line 121)
> � at com/sun/tools/javac/util/JavacMessages.setCurrentLocale (line 73)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 98)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 88)
> � at com/sun/tools/javac/main/Main.getLocalizedString (line 584)
> � at com/sun/tools/javac/main/Main.help (line 151)
> � at com/sun/tools/javac/main/Main.compile (line 377)
> � at com/sun/tools/javac/main/Main.compile (line 353)
> � at com/sun/tools/javac/main/Main.compile (line 342)
> � at com/sun/tools/javac/main/Main.compile (line 333)
> � at com/sun/tools/javac/Main.compile (line 76)
> � at com/sun/tools/javac/Main.main (line 61)
> java/lang/ClassNotFoundException: com/sun/tools/javac/resources/javac_de_DE
> � at avian/SystemClassLoader.findVMClass (native)
> � at avian/SystemClassLoader.findClass (line 26)
> � at java/lang/ClassLoader.loadClass (line 423)
> � at java/lang/ClassLoader.loadClass (line 356)
> � at java/util/ResourceBundle$Control.newBundle (line 2565)
> � at java/util/ResourceBundle.loadBundle (line 1436)
> � at java/util/ResourceBundle.findBundle (line 1400)
> � at java/util/ResourceBundle.getBundleImpl (line 1296)
> � at java/util/ResourceBundle.getBundle (line 796)
> � at com/sun/tools/javac/util/JavacMessages.getBundles (line 121)
> � at com/sun/tools/javac/util/JavacMessages.setCurrentLocale (line 73)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 98)
> � at com/sun/tools/javac/util/JavacMessages.<init> (line 88)
> � at com/sun/tools/javac/main/Main.getLocalizedString (line 584)
> � at com/sun/tools/javac/main/Main.help (line 151)
> � at com/sun/tools/javac/main/Main.compile (line 377)
> � at com/sun/tools/javac/main/Main.compile (line 353)
> � at com/sun/tools/javac/main/Main.compile (line 342)
> � at com/sun/tools/javac/main/Main.compile (line 333)
> � at com/sun/tools/javac/Main.compile (line 76)
> � at com/sun/tools/javac/Main.main (line 61)
> Usage: javac <options> <source files>
> where possible options include:
> � -g������������������������ Generate all debugging info
> � -g:none������������������� Generate no debugging info
> � -g:{lines,vars,source}���� Generate only some debugging info
> � -nowarn������������������� Generate no warnings
> � -verbose������������������ Output messages about what the compiler is
> doing
> � -deprecation�������������� Output source locations where deprecated APIs
> are used
> � -classpath <path>��������� Specify where to find user class files and
> annotation processors
> � -cp <path>���������������� Specify where to find user class files and
> annotation processors
> � -sourcepath <path>�������� Specify where to find input source files
> � -bootclasspath <path>����� Override location of bootstrap class files
> � -extdirs <dirs>����������� Override location of installed extensions
> � -endorseddirs <dirs>������ Override location of endorsed standards path
> � -proc:{none,only}��������� Control whether annotation processing and/or
> compilation is done.
> � -processor <class1>[,<class2>,<class3>...] Names of the annotation
> processors to run; bypasses default discovery process
> � -processorpath <path>����� Specify where to find annotation processors
> � -d <directory>������������ Specify where to place generated class files
> � -s <directory>������������ Specify where to place generated source files
> � -implicit:{none,class}���� Specify whether or not to generate class files
> for implicitly referenced files
> � -encoding <encoding>������ Specify character encoding used by source files
> � -source <release>��������� Provide source compatibility with specified
> release
> � -target <release>��������� Generate class files for specific VM version
> � -version������������������ Version information
> � -help��������������������� Print a synopsis of standard options
> � -Akey[=value]������������� Options to pass to annotation processors
> � -X������������������������ Print a synopsis of nonstandard options
> � -J<flag>������������������ Pass <flag> directly to the runtime system
> � -Werror������������������� Terminate compilation if warnings occur
> � @<filename>��������������� Read options and filenames from file

None of that looks abnormal to me. When you print every exception that is
ever thrown, you get a lot of noise, but that doesn't mean anything is
wrong.

Joel Dice

unread,
Feb 13, 2013, 1:27:09 PM2/13/13
to av...@googlegroups.com, simon.och...@gmail.com
On Wed, 13 Feb 2013, simon.och...@gmail.com wrote:

> Hi Joel,
>
> I'm still seeing "org/apache/tools/ant/BuildException:
> ../jdk-avian/jre/../bin is not an absolute path" in the latest
> log. �Are
> you absolutely sure JAVA_HOME is set to an absolute path?
>
>
> Yes. I have absolutely no idea how or where it gets that path from (it is
> the correct path). I even checked whether there are any symlinks confusing
> Ant.

Are you still using this command?

% LD_LIBRARY_PATH=../jdk-avian/jre/lib/amd64 ionice -c 3 nice
../jdk-avian/jre/bin/java -Xmx2048m -Xss1m -classpath
../../lib/apache-ant-1.8.4/lib/ant-launcher.jar
-Dant.home=../../lib/apache-ant-1.8.4
-Dant.library.dir=../../lib/apache-ant-1.8.3/lib
org.apache.tools.ant.launch.Launcher test

If so, would you please try changing "../jdk-avian/jre/bin/java" to an
absolute path? Maybe Ant is trying to find javac based on the java
command and getting confused by the relative path.

Joel Dice

unread,
Feb 13, 2013, 1:40:56 PM2/13/13
to av...@googlegroups.com, simon.och...@gmail.com
Looking at JavaEnvUtils in the Ant source tree, I see that it is creating
the path using the java.home system property, which is hard-coded into
Avian's libjvm.so. Did you specify a relative path when building Avian?
E.g. openjdk=../jdk-avian> If so, would you do a clean build with an
absolute path?

Joel Dice

unread,
Feb 13, 2013, 2:29:54 PM2/13/13
to av...@googlegroups.com, simon.och...@gmail.com
On Wed, 13 Feb 2013, simon.och...@gmail.com wrote:

> Wow, it seems as this was the error all the time. :-/
>
> Would it make sense to fix/mention this somewhere?

Yeah; the question is what to do about it. We could try to automatically
convert a relative path to an absolute one in the makefile, or just
document that only absolute paths are allowed.

Joel Dice

unread,
Feb 13, 2013, 7:14:29 PM2/13/13
to av...@googlegroups.com, simon.och...@gmail.com
On Wed, 13 Feb 2013, simon.och...@gmail.com wrote:

> Still running the tests and no failures so far!
>
> Do you have an idea why the tests run very slow? top tells me that only a
> single CPU is used, although partest should run tests in parallel.

If you followed my instructions, you built with mode=debug-fast, which
means optimization is disabled for all the native code. I did that
because I want to get a sensible core dump if it crashes, but it also
means it will be much slower than an optimized build. Also, my
instructions specified using ionice and nice to make the whole process the
lowest priority relative to everything else running on the system, which
also slows things down. I always do that with long running processes so
it doesn't bog down my interactive apps.

I'm not sure if either of those things explain why it's only using one
CPU. My current priority is to make sure the tests pass without crashing;
once that's verified (which may literally take many days at this rate),
I'll start profiling to see where time is being spent.

Joel Dice

unread,
Feb 13, 2013, 7:17:45 PM2/13/13
to av...@googlegroups.com, simon.och...@gmail.com
On Wed, 13 Feb 2013, Joel Dice wrote:

> I'm not sure if either of those things explain why it's only using one CPU.
> My current priority is to make sure the tests pass without crashing; once
> that's verified (which may literally take many days at this rate), I'll start
> profiling to see where time is being spent.

If I had to guess, though, I'd say it's spending almost all its time
garbage collecting. That's not parallelized, so it would explain using
only one CPU, and it's especially sensitive to the C++
compiler optimization level.

Joel Dice

unread,
Feb 14, 2013, 8:48:03 PM2/14/13
to av...@googlegroups.com, simon.och...@gmail.com
On Thu, 14 Feb 2013, simon.och...@gmail.com wrote:

> Did your tests finish yet? Mine is still running (run/reify... currently).

No, still running. When I have time, I'll profile an optimized build to
find out why they're so slow.

Joel Dice

unread,
Feb 16, 2013, 10:42:45 AM2/16/13
to av...@googlegroups.com, simon.och...@gmail.com
On Sat, 16 Feb 2013, simon.och...@gmail.com wrote:

> my results are in: http://oxnrtr.de/upload/test-log

Thanks for posting them.

> Did it finish for you yet?

Unfortunately, I lost my SSH connection to the machine that it was running
on. I really should have been running it in Screen, but I wasn't. I'll
try profiling one of the tests to see if there are any easy ways to speed
it up before I try running the whole suite again.

Pablo Guerrero

unread,
Feb 16, 2013, 1:29:20 PM2/16/13
to av...@googlegroups.com, simon.och...@gmail.com
Hi Simon,

That looks great, appart from a couple of tests it's working fine. Do you know how many tests didn't run because of the crash?
Is it possible to run the remaining tests without retesting all the tests that were ok?

Cheers,
Pablo


Pablo Guerrero

unread,
Feb 16, 2013, 3:14:46 PM2/16/13
to av...@googlegroups.com
Wow, thanks for testing it.


On Sat, Feb 16, 2013 at 8:30 PM, <simon.och...@gmail.com> wrote:
Update:

testing: [...]/files/run/parserJavaIdent.scala                        [FAILED]

This seems to be a valid error (maybe an issue with changed Unicode character categories?)

testing: [...]/files/scalacheck/array-old.scala                       [  OK  ]

1 of the 2 remaining tests ran successfully, it still tests/hangs on the other one, test/files/scalacheck/Ctrie.scala.

Apart from that, we're finished. :-)

--
You received this message because you are subscribed to the Google Groups "Avian" group.
To unsubscribe from this group and stop receiving emails from it, send an email to avian+un...@googlegroups.com.

Joel Dice

unread,
Feb 18, 2013, 10:53:56 AM2/18/13
to av...@googlegroups.com
On Sat, 16 Feb 2013, simon.och...@gmail.com wrote:

> Ok, Ctrie seems to cause tho OOME:
>
> % test/partest test/files/scalacheck/Ctrie.scala
>
> Testing individual files
> java/lang/OutOfMemoryError
> java/lang/OutOfMemoryError
> Aborted (core dumped)
> test/partest test/files/scalacheck/Ctrie.scala� 2476,37s user 175,45s system
> 113% cpu 39:01,77 total

I set Verbose = true in heap.cpp to see what was going on GC-wise.
Unsurprisingly given the (lack of) performance we've been seeing, the VM
was spending about half its time garbage collecting, but stayed steady at
about 130MB of heap used at first. After a while, though, the heap
started growing again, and when the VM started running low on memory it
spent a lot more time GC'ing, to the point that it spent almost all its
time doing that. I never got a core dump, but it did eventually run out
of memory.

I see two problems here:

1. The Ctrie test is using an apparently unbounded amount of memory on
Avian, which I'll need to compare with HotSpot to see if there's an
Avian-specific leak.

2. Avian slows way, way down when it runs low on memory, which in this
case just delays the inevitable OOME. While it should certainly make its
best effort to GC prior to an OOME, the current strategy is too aggressive
too early.

More generally, it seems that the GC code is not well tuned for the Scala
compiler, which allocates and retains a lot more memory than the small
apps Avian was designed for. I strongly suspect this is a big part
of the reason all these tests are slow. To make these tests run faster,
we'll need to improve the allocation and collection code to scale up
automatically without hurting efficiency for smaller apps. I doubt we'll
be able to get very close to HotSpot's performance without matching its
complexity, but we should be able to get a lot closer than we are now.

Pablo Guerrero

unread,
Feb 28, 2013, 4:46:53 AM2/28/13
to av...@googlegroups.com
Hi Simon, that's great news !

Thanks for moving this issue.

Cheers,
Pablo


On Thu, Feb 28, 2013 at 10:13 AM, <simon.och...@gmail.com> wrote:
FYI: Scala 2.9.3 was released today including the necessary compiler fix for the SoftReference issue. The 2.10.x branch will follow with the 2.10.1 release in approximately two weeks.

Thanks again for your help!

Joel Dice

unread,
Mar 5, 2013, 12:37:41 PM3/5/13
to av...@googlegroups.com
On Sat, 16 Feb 2013, simon.och...@gmail.com wrote:

> Ok, Ctrie seems to cause tho OOME:
>
> % test/partest test/files/scalacheck/Ctrie.scala
>
> Testing individual files
> java/lang/OutOfMemoryError
> java/lang/OutOfMemoryError
> Aborted (core dumped)
> test/partest test/files/scalacheck/Ctrie.scala� 2476,37s user 175,45s system
> 113% cpu 39:01,77 total

This is fixed:

https://github.com/ReadyTalk/avian/commit/84f99f0dcad3a274f8118479409eccbc0857ad0a

It's still depressingly slow, but it's a lot faster than it used to be,
and it actually succeeds now.

Joel Dice

unread,
Mar 6, 2013, 10:57:26 AM3/6/13
to av...@googlegroups.com, simon.och...@gmail.com
On Wed, 6 Mar 2013, simon.och...@gmail.com wrote:

> Hi Joel,
>
> I built Scala successfully on Avian and it seems to be faster than before!
> The tests are still running (against Scala trunk), but I experience a lot of
> failures:

Ha! Breaking half the tests is a small price to pay for the speed
improvement, right?

Just kidding, I'll look into it.

Joel Dice

unread,
Mar 6, 2013, 11:37:06 AM3/6/13
to av...@googlegroups.com, simon.och...@gmail.com
> Well, the new timings look certainly impressive:
> https://groups.google.com/d/msg/scala-language/HW4FvHVLo8k/GardlMrZWgoJ :-)

It just confirms that garbage collection is the bottleneck, since that's
the only thing that's really changed from a performance perspective. The
good news is there's still more we can do to make it faster, including
thread-local heaps (better parallelism), value types (less churn on the
heap), and just tuning the heuristics and constants in heap.cpp.

Joel Dice

unread,
Mar 7, 2013, 1:32:19 PM3/7/13
to av...@googlegroups.com
Okay, this is a tricky one. The recent GC performance improvements have
exposed an issue that I'm not sure how to address.

What's happening is that some of the tests are generating finalizable
objects (i.e. instances of classes which override Object.finalize) faster
than the finalizer thread can finalize them. This wasn't an issue
previously because the VM was much more aggressive about doing major
collections, especially as memory got tight. That meant the number of
finalizable objects to accumulate between GC cycles was small enough that
the finalizer thread had no trouble keeping up. Now, however, the VM
tries to minimize the number of major collections until it's truly almost
out of memory, which produces a large list of finalizable objects at a
point where it's too late to do anything about them, and we're forced to
throw an OOME.

Specifically, I'm seeing a case in the Scala test suite where the VM needs
to do a major collection to make room for an allocation request, and the
result is that only about 350MB of the 1.5GB heap is reachable by "normal"
objects, while the rest is reachable only via finalizable objects. If we
could block the collection and wait for the finalizer thread to do its
job, we could free up 1.15GB (assuming the finalize methods are well
behaved and don't make stuff reachable again). However, we can't just
block and wait for that to happen because the finalizer might end up
executing arbitrary code and therefore might try to acquire a lock that
the collecting thread already holds, leading to deadlock. Nor can we just
finalize the objects directly from the collecting thread, since we might
end up trying to acquire a lock that some other thread holds while its
waiting for the collecting thread to finish (besides which, it would
violate the Java spec to do so).

Apparently the same thing is possible in HotSpot (see 3.1.1 of
http://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/memleaks.html)
and probably any JVM. OTOH, the whole Scala test suite runs on HotSpot
without errors, so there must be some way to minimize the chance of this
happening even if we can't avoid it in all cases.

Any ideas?

P.S. Object.finalize is an abomination. I hate, hate, hate, hate, hate
it. Hate it.

Joshua Warner

unread,
Mar 7, 2013, 2:23:43 PM3/7/13
to av...@googlegroups.com
My suggestion would be to detect cases where the finalizer thread is running behind and then either do something to bump it's priority, or do something to slow down the rest of the VM.  That slow down could be something like forcing the GC back into the super-aggressive mode, or make every object allocation yield (using sleep(0) or somesuch).

To be clear, I wouldn't suggest these measures to slow down the VM if bumping the thread priority works.

After the finalizer thread has caught up, or at perhaps as it is getting close to being caught up, we remove the slow-down measures, and/or reduce the finalizer thread priority back to normal.

-Joshua


--
You received this message because you are subscribed to the Google Groups "Avian" group.
To unsubscribe from this group and stop receiving emails from it, send an email to avian+unsubscribe@googlegroups.com.

Joel Dice

unread,
Mar 7, 2013, 2:38:58 PM3/7/13
to av...@googlegroups.com
On Thu, 7 Mar 2013, simon.och...@gmail.com wrote:

> Any ideas?
>
> I think the weird thing is the amount of objects who need to be finalized in
> the first place.
> Even on Hotspot it takes 30 times more time to collect an instance with a
> finalizer than an instance without, as far as I know.
>
> Do you have a hint which classes are the worst offenders?
> I searched in the code base, but didn't find anything which could explain
> these results.

I've looked more closely now, and it's starting to look like it's
something internal to the VM. Avian has two kinds of finalizable objects:
the regular, Object.finalize kind and its own internal kind which are
implemented in C++ inside the VM and which don't require a separate thread
to run. We use the latter to remove interned strings from the intern map,
for example. It's the internal kind that seem to be the big problem, so
it may have nothing to do with finalizer thread after all. I'll post when
I have an update.

Joel Dice

unread,
Mar 7, 2013, 10:51:19 PM3/7/13
to av...@googlegroups.com
Yeah, it was a relatively old bug in the VM which was being hidden by the
large number of GC cycles it used to do in low memory situations. Now
that it does fewer such cycles (which is a good thing), the bug has been
exposed. It's fixed now:

https://github.com/ReadyTalk/avian/commit/3c44cdc50b6be41440529c8dbd648dd972621593

The good news, besides the fact that the bug was found and fixed, is that
it forced me to think hard about how the VM should act when very low on
memory, and I think it's a lot more robust and performant now than it used
to be.

I've got the Scala test suite running now; so far, so good.

> By the way, did you see the changes to String made by Oracle in 7u6 (no
> structural sharing anymore)? Will this have a good or bad impact on Avian,
> if Avian's implementation does the same?

Yeah, the VM automatically detects whether the class library uses
shared-structure strings or not and matches that behavior for
internally-generated strings. It's neither good nor bad for Avian; each
strategy has its advantages and disadvantages, and the VM has no problem
accomodating either one.

Joel Dice

unread,
Mar 8, 2013, 11:21:29 AM3/8/13
to av...@googlegroups.com
On Fri, 8 Mar 2013, simon.och...@gmail.com wrote:

> What's your test status? It looks pretty good at my side, running both fast
> and mostly successful, but it seems to hang on scalacheck/Ctrie.scala:
> https://gist.github.com/soc/5116915

Yeah, mine did the same thing. But then I ran the Ctrie test separately
and it finished after 10 minutes. Now I'm thinking it's the test that
comes after Ctrie that's hanging, since partest gave Ctrie an OK. I'm
rerunning the suite now with more verbose logging.

> The weird things is that there isn't any CPU usage visible at all (my
> previous tries with older versions of Avian always caused 100% CPU usage).

What I'm seeing is that the suite uses 200-500% CPU on my multicore box
except when GC'ing, but I didn't check the CPU when it hung.

Joel Dice

unread,
Mar 8, 2013, 4:55:23 PM3/8/13
to av...@googlegroups.com
On Fri, 8 Mar 2013, simon.och...@gmail.com wrote:

>
> Now I'm thinking it's the test that comes after Ctrie that's
> hanging,
> since partest gave Ctrie an OK.
>
> ᅵ
> Oh right, you're absolutely correct. It's the test after Ctrie.

Looks like it's test/files/scalacheck/parallel-collections, and it's
reproducable when running that test directly. Can you confirm that that
test ran to completion on an older version of Avian?

I've attached a full thread dump captured during the hang in case it
offers any clues. I'm still not familiar enough with Scala to know the
best way to debug this. Any tips?
parallel-collections-trace.txt

Joel Dice

unread,
Mar 8, 2013, 8:54:03 PM3/8/13
to Joel Dice, av...@googlegroups.com
Nevermind, I figured it out. There's a lovely bit of code in
scala/collection/parallel/package.scala:

private[parallel] def getTaskSupport: TaskSupport =
if (scala.util.Properties.isJavaAtLeast("1.6")) {
val vendor = scala.util.Properties.javaVmVendor
if ((vendor contains "Oracle") || (vendor contains "Sun") || (vendor contains "Apple")) new ForkJoinTaskSupport
else new ThreadPoolTaskSupport
} else new ThreadPoolTaskSupport

If I change that to just

private[parallel] def getTaskSupport: TaskSupport = new ForkJoinTaskSupport

the parallel-collections test passes on Avian and HotSpot. However, if I
change it to

private[parallel] def getTaskSupport: TaskSupport = new ThreadPoolTaskSupport

it hangs on both Avian and HotSpot. In other words, the test simply won't
complete when using ThreadPoolTaskSupport, regardless of the VM, which
means the test can only pass if the VM vendor is Oracle, Sun, or Apple.
Ouch.

Joel Dice

unread,
Mar 9, 2013, 10:44:27 AM3/9/13
to simon.och...@gmail.com, av...@googlegroups.com, Joel Dice
On Sat, 9 Mar 2013, simon.och...@gmail.com wrote:

> Here we go:
> https://groups.google.com/d/msg/scala-internals/7N-7HzoH8tM/9mx4bZd4JfoJ

Thanks!

> (Apart from that, fork join and all the other concurrency stuff would be
> a nice addition to Avian, because as far as I know all the code is in
> the public domain.)

Yes, it's certainly compatible from a licensing perspective, but as I've
said before I don't like forking upstream code when it's already being
maintained by someone else. The world doesn't need ten different versions
of e.g. ForkJoinPool, each maintained by different people.

Joel Dice

unread,
Mar 19, 2013, 10:36:56 AM3/19/13
to Maarten Koopmans, av...@googlegroups.com
On Tue, 19 Mar 2013, Maarten Koopmans wrote:

> I stand in awe thinking of what Avian and Scala can do.... Quick question:
> if I understand this thread correctly, I should be able to compile scala
> packaged jars with Avian, it's the scala tests that fail when using parallel
> collections.
> Am I correct?

The bug that causes the parallel collections test(s) to fail
(https://groups.google.com/forum/#!msg/scala-internals/7N-7HzoH8tM/9mx4bZd4JfoJ)
could possibly cause your app to fail too, depending on if and how it
uses parallel collections. You can fix that easily, though, by editing
scala/collection/parallel/package.scala so that TaskSupport is
unconditionally initialized as a new ForkJoinTaskSupport instance.

Also, I'm not sure what you mean by "compile scala packaged jars". If you
mean embed your Scala app in an executable along with the contents of
scala-library.jar and any other dependencies using Avian, yes that should
work fine. There's an example here: https://github.com/dicej/scala-avian.
Let me know if you have any trouble.

Maarten Koopmans

unread,
Mar 19, 2013, 11:28:51 AM3/19/13
to av...@googlegroups.com, Maarten Koopmans


Op dinsdag 19 maart 2013 15:36:56 UTC+1 schreef Joel Dice het volgende:
On Tue, 19 Mar 2013, Maarten Koopmans wrote:

> I stand in awe thinking of what Avian and Scala can do.... Quick question:
> if I understand this thread correctly, I should be able to compile scala
> packaged jars with Avian, it's the scala tests that fail when using parallel
> collections.
> Am I correct?

The bug that causes the parallel collections test(s) to fail
(https://groups.google.com/forum/#!msg/scala-internals/7N-7HzoH8tM/9mx4bZd4JfoJ)
could possibly cause your app to fail too, depending on if and how it
uses parallel collections.  You can fix that easily, though, by editing
scala/collection/parallel/package.scala so that TaskSupport is
unconditionally initialized as a new ForkJoinTaskSupport instance.

Good, I don't think I use that, but you never know what some dependencies use. 

Also, I'm not sure what you mean by "compile scala packaged jars".  If you
mean embed your Scala app in an executable along with the contents of
scala-library.jar and any other dependencies using Avian, yes that should
work fine.  There's an example here: https://github.com/dicej/scala-avian.
Let me know if you have any trouble.

That's precisely what I meant. I'll give it a go. Thanks for the great work.
 

Simon Ochsenreither

unread,
Apr 3, 2013, 6:08:00 AM4/3/13
to av...@googlegroups.com, Maarten Koopmans
The fixes for the thread pool selection has been merged into 2.10.x and 2.11 trunk. The next releases, 2.10.2 and 2.11 will ship with this fix.

Thanks a lot to everyone involved, I'm rebuilding and testing Scala on Avian now.

Simon Ochsenreither

unread,
Apr 3, 2013, 9:00:03 AM4/3/13
to av...@googlegroups.com, Maarten Koopmans
Hi Joel,

looks like I found a potential Avian bug!

The test https://github.com/scala/scala/blob/master/test/files/run/blame_eye_triple_eee.scala fails with this error on Avian:

if (NaN == NaN) is broken
if (x == x) is good
if (x == NaN) is good
if (NaN != NaN) broken
if (x != x) is good
if (NaN != x) is good
x matching was good
NaN matched 0!
loop with NaN was goood


Expected results: https://github.com/scala/scala/blob/master/test/files/run/blame_eye_triple_eee.check

The Scala compiler runs with -optimize for this test. I haven't checked whether it can be reproduced without -optimize yet, but the test works on HotSpot.
The test was added very recently, so this is not something which started failing suddenly (e. g. due to a regression).

Bye,

Simon

Simon Ochsenreither

unread,
Apr 3, 2013, 9:40:56 AM4/3/13
to av...@googlegroups.com, Maarten Koopmans
It finished running, but the way it finished doesn't look too good:

...
[partest] Running instrumented files
[partest] testing: [...]/files/instrumented/InstrumentationTest.scala [ OK ]
[partest] testing: [...]/files/instrumented/t6611.scala [ OK ]
[partest] testing: [...]/files/instrumented/inline-in-constructors [ OK ]
[1] 8022 illegal hardware instruction (core dumped)

Apart from that almost all tests, succeeded: https://gist.github.com/soc/5301272

Joel Dice

unread,
Apr 3, 2013, 6:21:17 PM4/3/13
to av...@googlegroups.com, Maarten Koopmans
Yes, it's a bug; thanks for reporting it. The only computer I have
access to right now is very slow, so I haven't tried building Scala
and running the test suite on it, but I was able to replicate the
problem in Java and fix it:

https://github.com/ReadyTalk/avian/commit/b436bd460a10fefedbfc7ec8faa2634d1308e788

Joel Dice

unread,
Apr 3, 2013, 6:25:25 PM4/3/13
to av...@googlegroups.com, Maarten Koopmans
On 4/3/13, Simon Ochsenreither <simon.och...@gmail.com> wrote:
Thanks for the update. My only computer right now is an old Intel
Atom with 1GB of RAM, and I don't want to even try running the test
suite on it. Next week I'll have a much faster machine to work with,
so I'll investigate this then.

Simon Ochsenreither

unread,
Apr 4, 2013, 7:55:38 AM4/4/13
to av...@googlegroups.com, Maarten Koopmans
Hi Joel,


Yes, it's a bug; thanks for reporting it.  The only computer I have
access to right now is very slow, so I haven't tried building Scala
and running the test suite on it, but I was able to replicate the
problem in Java and fix it:

I think it is almost, but not completely, fixed! I ran the tests with the following results:

  [partest] testing: [...]/files/run/blame_eye_triple_eee.scala                   [FAILED]
  [partest] if (NaN == NaN) is broken
  [partest] if (x == x) is good
  [partest] if (x == NaN) is good
  [partest] if (NaN != NaN) is good
  [partest] if (x != x) is good
  [partest] if (NaN != x) is good
  [partest] x matching was good
  [partest] NaN matching was good
  [partest] loop with NaN was goood


Bye,

Simon

Joel Dice

unread,
Apr 4, 2013, 10:06:00 PM4/4/13
to av...@googlegroups.com

Simon Ochsenreither

unread,
Apr 5, 2013, 4:50:58 AM4/5/13
to av...@googlegroups.com
I'm on it!

Simon Ochsenreither

unread,
Apr 5, 2013, 6:22:23 AM4/5/13
to av...@googlegroups.com
Yes, this seems to fix it!

  [partest] testing: [...]/files/run/blame_eye_triple_eee-double.scala            [  OK  ]
  [partest] testing: [...]/files/run/blame_eye_triple_eee-float.scala             [  OK  ]


I have also added a float version to the Scala test suite to make sure stuff keeps working on both the Scala and the Avian side for all NaNs available.

Thanks a lot!

Simon

Joel Dice

unread,
Apr 9, 2013, 9:02:32 PM4/9/13
to av...@googlegroups.com, Maarten Koopmans
I just ran the full test suite using the v2.10.1 tag in the Git repo
(ant test in master didn't get very far using HotSpot or Avian). It ran
to completion without aborting, although several tests failed. I ran it
again with HotSpot (i.e. a stock OpenJDK 7) and it looks like the same
tests failed that way, too. How can I tell which tests "should" fail
besides running them on OpenJDK? Should any of them fail?

Simon Ochsenreither

unread,
Apr 10, 2013, 4:24:08 AM4/10/13
to av...@googlegroups.com, Maarten Koopmans
This is weird. All tests should pass, because a commit won't be merged if the test suite fails.

Can you list the tests which caused issues?

Joel Dice

unread,
Apr 10, 2013, 12:05:06 PM4/10/13
to av...@googlegroups.com, Maarten Koopmans
It seems to be a bit non-deterministic. The first time I ran it, ten
tests failed (see test.txt, attached), but I just did a clean build and
test and only one failed (test2.txt).
test.txt
test2.txt

Simon Ochsenreither

unread,
Apr 10, 2013, 1:46:38 PM4/10/13
to av...@googlegroups.com, Maarten Koopmans
Mhhh, interesting. The first thing I see from the logs is that the build system has updated its bootstrap libraries and recompiled the distribution. But the Git hash is the same, so this shouldn't make any difference.
I have experienced an issue with one jvm test in the past which both failed on Hotspot and Avian on the first try.

I'm currently not at my workstation where I was compiling the latest Avian against the latest Scala distribution. I'll drive home and check the results.

Btw, if you build against trunk (instead of 2.10.1) try the new ant test.suite.color ... much nicer. :-)

Simon Ochsenreither

unread,
Apr 10, 2013, 2:52:20 PM4/10/13
to av...@googlegroups.com, Maarten Koopmans
Ok, these are my results: https://gist.github.com/soc/5357355

As you see, no test failures, but
illegal hardware instruction (core dumped) 
while testing test/files/run.


Simon Ochsenreither

unread,
Apr 10, 2013, 4:41:25 PM4/10/13
to av...@googlegroups.com, Maarten Koopmans
Looking at the test failure in question it seems that the issue is (depending on the exception handling semantics of the parallel collection framework) that the test expects a CompositeThrowable (which basically says "multiple exceptions occurred") but only a single exception (the one originally thrown) occurs on Avian.

So either the catching of the RuntimeException from the various worker threads doesn't work properly or the operation is aborted before another exception comes in.

Joel Dice

unread,
Apr 10, 2013, 4:49:31 PM4/10/13
to av...@googlegroups.com, Maarten Koopmans
On Wed, 10 Apr 2013, Simon Ochsenreither wrote:

Which failure are you refering to? If it's one of the ones in the logs I
posted, note that both of them were run using a stock OpenJDK 7 (IcedTea),
not on Avian. I just checked out master and ran the suite (again, on
HotSpot, not Avian) with the attached results. I'm running it on Avian
now.
test-master.txt

Simon Ochsenreither

unread,
Apr 10, 2013, 5:13:04 PM4/10/13
to av...@googlegroups.com, Maarten Koopmans

Which failure are you refering to?  If it's one of the ones in the logs I
posted, note that both of them were run using a stock OpenJDK 7 (IcedTea),
not on Avian.

I was referring to files/run/t5375.scala. Ooops, didn't realize that at all ... then it is even more weird. On OpenJDK all tests are expected to pass of course!
 
I just checked out master and ran the suite (again, on HotSpot, not Avian)
with the attached results.  I'm running it on Avian now.

Ok, this is weird ... could you post more information about the machine and the operating system?
I'm wondering whether it's a timing issue or a glitch in that specific Java version. Did you try a different Java 7 version?

Mine is

java version "1.7.0_17"
OpenJDK Runtime Environment (IcedTea7 2.3.8) (7u17-2.3.8-1ubuntu1)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)


and I'm not seeing the issues.

If the issue is not related to that, I can bring it up on the Scala mailing list. The design of the exception handling is questionable anyway.

Joel Dice

unread,
Apr 10, 2013, 5:19:13 PM4/10/13
to av...@googlegroups.com, Maarten Koopmans
On Wed, 10 Apr 2013, Simon Ochsenreither wrote:

>
> Which failure are you refering to? �If it's one of the ones in
> the logs I
> posted, note that both of them were run using a stock OpenJDK 7
> (IcedTea),
> not on Avian.
>
>
> I was referring to files/run/t5375.scala. Ooops, didn't realize that at all
> ... then it is even more weird. On OpenJDK all tests are expected to pass of
> course!
> �
> I just checked out master and ran the suite (again, on HotSpot,
> not Avian)
> with the attached results. �I'm running it on Avian now.
>
>
> Ok, this is weird ... could you post more information about the machine and
> the operating system?

x86_64 Debian Wheezy

$ java -version
java version "1.7.0_03"
OpenJDK Runtime Environment (IcedTea7 2.1.7) (7u3-2.1.7-1)
OpenJDK 64-Bit Server VM (build 22.0-b10, mixed mode)
$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 58
model name : Intel(R) Core(TM) i7-3667U CPU @ 2.00GHz
stepping : 9
cpu MHz : 2505.847
cache size : 6144 KB
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc
up rep_good nopl pni monitor ssse3 lahf_lm
bogomips : 5011.69
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:

(it's actually a dual core CPU, but the guest VM I'm running only has one
core allocated to it. It's got 4GB of memory.)

> I'm wondering whether it's a timing issue or a glitch in that specific Java
> version. Did you try a different Java 7 version?

Not yet; I'll try that next.

Joel Dice

unread,
Apr 10, 2013, 6:58:44 PM4/10/13
to av...@googlegroups.com
Just tried with the latest OpenJDK 7 from
http://hg.openjdk.java.net/jdk7u/jdk7u-dev, and eventually ran out of
PermGen space; see attached.
test-master-openjdk.txt

Simon Ochsenreither

unread,
Apr 10, 2013, 7:46:41 PM4/10/13
to av...@googlegroups.com
Weird, can't reproduce. Can you try a larger -XX:MaxPermSize value?
But the other issue wasn't fixed anyway, so I'll bring it up on the Scala mailing list tomorrow because it doesn't seem to be dependant on the JVM version/implementation.

Thanks for testing!

Simon Ochsenreither

unread,
Apr 11, 2013, 10:00:52 AM4/11/13
to av...@googlegroups.com
I updated Avian, Scala and OpenJDK to the latest version, but I'm not getting that far to check whether I can reproduce the PermGen issue with Avian + OpenJDK class lib because of the “illegal hardware instruction” crasher.
I'm testing it now with HotSpot + OpenJDK.

Simon Ochsenreither

unread,
Apr 12, 2013, 8:11:08 AM4/12/13
to av...@googlegroups.com, Maarten Koopmans
Regarding files/run/t5375.scala:

After investigation, I'm pretty sure Scala is to blame here.

The exception handling behaviour is what I consider broken: If a single exception occurs, that exception is reported, but if multiple exceptions occur, they are put in a Set and wrapped in a CompositeThrowable.
The issue is that it is completely nondeterministic how many exceptions are catched before the operation is aborted. It depends on the machine, the available cores and hyper-threading, the operating system, the threadpool implementation and configuration, the size of the collection and the runtime.

Because this is so incredibly unintuitive, the creators of the test didn't expect it and forgot to add an additional clause catching the RuntimeException.

Simon Ochsenreither

unread,
Apr 13, 2013, 6:18:07 PM4/13/13
to av...@googlegroups.com, Maarten Koopmans
I recompiled Avian without tail calls and now it doesn't crash anymore, but there seems to be a null value at the “wrong” place:

...
[partest] ok 1342 - run/t3714.scala
[partest] ok 1343 - run/t7214.scala
[partest] ok 1344 - run/t5545.scala
[partest] ok 1345 - run/t5824.scala
 
BUILD FAILED
/home/soc/Entwicklung/avian-build/scala/build.xml:1443: null

Full log: https://gist.github.com/soc/5357355


Thanks and bye!

Simon

Simon Ochsenreither

unread,
Apr 13, 2013, 8:18:37 PM4/13/13
to av...@googlegroups.com, Maarten Koopmans
I just diff'ed the test output against the directory contents and the winner is, once again: run/parserJavaIdent.scala.
Something in that file really manages to kill Avian.

Simon Ochsenreither

unread,
Apr 14, 2013, 6:14:51 PM4/14/13
to av...@googlegroups.com, Maarten Koopmans
I executed the code of that test stand-alone and while it didn't crash, the output seems to be incorrect:

./build/linux-x86_64-tails-openjdk/avian-dynamic -cp /home/soc/Entwicklung/lib/scala-current/lib/scala-library.jar:/home/soc/Entwicklung/lib/scala-current/lib/scala-reflect.jar:/home/soc/Entwicklung/lib/scala-current/lib/scala-compiler.jar:. JavaIdent
[1.7] parsed: simple
[1.8] parsed: with123
[1.6] parsed: with$
[1.10] parsed: with?????
[1.6] parsed: with_
[1.6] parsed: _with
[1.1] failure: java identifier expected

3start
^
[1.1] failure: java identifier expected

-start
^
[1.5] failure: java identifier expected

with-s
    ^
[1.3] failure: java identifier expected

we?scala
  ^
[1.6] failure: java identifier expected

with space
     ^
soc@laptop ~/Entwicklung/avian (git)-[master] % scala JavaIdent
[1.7] parsed: simple
[1.8] parsed: with123
[1.6] parsed: with$
[1.10] parsed: withøßöèæ
[1.6] parsed: with_
[1.6] parsed: _with
[1.1] failure: java identifier expected

3start
^
[1.1] failure: java identifier expected

-start
^
[1.5] failure: java identifier expected

with-s
    ^
[1.3] failure: java identifier expected

we♥scala
  ^
[1.6] failure: java identifier expected

with space
     ^

Joel Dice

unread,
Apr 16, 2013, 9:39:45 PM4/16/13
to av...@googlegroups.com, Maarten Koopmans
This should fix it:

https://github.com/ReadyTalk/avian/commit/aa513c2c1dcde7fb9e329f6a7a491da544d73e42

However, the Scala test might be broken anyway, since it seems to rely on
e.g. the "♥"character being representable in the system's default
character set. If that set is ASCII, for example, the character won't be
representable. Perhaps the test should be changed to use UTF-8
explicitly.

Simon Ochsenreither

unread,
Apr 17, 2013, 5:34:25 AM4/17/13
to av...@googlegroups.com, Maarten Koopmans
Hi Joel,

thanks, I'll rebuild and test it as soon as I'm home!
 
However, the Scala test might be broken anyway, since it seems to rely on
e.g. the "♥"character being representable in the system's default
character set.  If that set is ASCII, for example, the character won't be
representable.  Perhaps the test should be changed to use UTF-8
explicitly.

Ok, that's certainly something I have to investigate. I assumed that the test-suite had set the encoding explicitly somewhere in the build.xml for all tests.

Thanks a lot!

Simon

Joel Dice

unread,
Apr 17, 2013, 12:45:10 PM4/17/13
to av...@googlegroups.com, Maarten Koopmans
On Wed, 17 Apr 2013, Simon Ochsenreither wrote:

> Ok, that's certainly something I have to investigate. I assumed that the
> test-suite had set the encoding explicitly somewhere in the build.xml for
> all tests.

It probably does; I think it was just broken because we were running the
test directly instead of via Ant.

BTW, I have noticed that the forked processes responsible for running each
test are not given e.g. -Xmx1536m -Xss1m arguments, which causes Avian to
run out of memory pretty quickly (it defaults to a heap limit of 128MB).
I worked around this by changing the default in the VM, but that's a hack.

Simon Ochsenreither

unread,
Apr 17, 2013, 4:06:10 PM4/17/13
to av...@googlegroups.com, Maarten Koopmans
It looks pretty good now:
https://gist.github.com/soc/5407293

(The issue with jvm/t7253 can be ignored, it fails on standard OpenJDK7u at my machine, too)

Joel Dice

unread,
Apr 17, 2013, 5:46:28 PM4/17/13
to av...@googlegroups.com, Maarten Koopmans
On Wed, 17 Apr 2013, Simon Ochsenreither wrote:

I don't think the tests are actually running on Avian based on the results
you posted. I'm running the suite now and getting numerous failures. The
ones I've looked into so far have been legitimate (see
https://github.com/ReadyTalk/avian/commit/81d77867160c69040b7f3b01fae1cc93459416ca).
I've attached an in-progress log (the suite is still running).

On my system, Ant forks processes using the java command in the PATH,
which may not be the same java Ant itself was launched with. I discovered
this by using "lsof | grep libjvm", which showed me that Ant was using
Avian's libjvm.so, but the subprocesses which actually ran the tests were
using HotSpot's libjvm.so. I suspect the same thing is happening on your
system. You can verify that by running java -version before you run ant;
if it doesn't say Avian, it's not using Avian. You can fix it by putting
the directory containing your Avian-based java command first in your PATH.
avian.txt

Joel Dice

unread,
Apr 17, 2013, 10:57:24 PM4/17/13
to Joel Dice, av...@googlegroups.com
On Wed, 17 Apr 2013, Joel Dice wrote:

> I don't think the tests are actually running on Avian based on the results
> you posted. I'm running the suite now and getting numerous failures. The
> ones I've looked into so far have been legitimate (see
> https://github.com/ReadyTalk/avian/commit/81d77867160c69040b7f3b01fae1cc93459416ca).
> I've attached an in-progress log (the suite is still running).

I've attached to complete log. It timed out before it could run all the
tests, apparently.

I'll investigate the failures as I have time.
avian.txt

Simon Ochsenreither

unread,
Apr 18, 2013, 8:14:20 AM4/18/13
to av...@googlegroups.com, Joel Dice
Hi Joel,


> I don't think the tests are actually running on Avian based on the results
> you posted.  I'm running the suite now and getting numerous failures.

*sigh* ... I somehow don't manage to prevent Ant from using the wrong stuff. :-(
I guess I'll set up a VM, so I can solve this issue once and for all.
 
I've attached to complete log.  It timed out before it could run all the
tests, apparently.

I'll (temporarily?) increase the time limit. I'll report back as soon as the change is merged.
Until this happens, you can also change it yourself in src/partest/scala/tools/partest/nest/DirectRunner.scala on line 43, before you build Scala:
    try if (!pool.awaitTermination(4, TimeUnit.HOURS))
 
I'll investigate the failures as I have time.

Thanks, I will also look into it. Let me know if there are any issues at the Scala side!

Bye,

Simon

PS: The Scala developers brought in a new person recently who is tasked with working on Scala's build infrastructure, testing more platforms, moving the Jenkins config to GitHub etc. This will hopefully make it easier to integrate Avian into the testing infrastructure and to prevent regressions in Avian and Scala in the future.

Joel Dice

unread,
Apr 18, 2013, 1:39:56 PM4/18/13
to Simon Ochsenreither, av...@googlegroups.com
On Thu, 18 Apr 2013, Simon Ochsenreither wrote:

> I've attached to complete log.  It timed out before it could run
> all the
> tests, apparently.
>
>
> I'll (temporarily?) increase the time limit. I'll report back as soon as the
> change is merged.
> Until this happens, you can also change it yourself in
> src/partest/scala/tools/partest/nest/DirectRunner.scala on line 43, before
> you build Scala:
>     try if (!pool.awaitTermination(4, TimeUnit.HOURS))

Perhaps it would be better to specify a per-test time limit rather than a
total limit for the whole suite. That way slower hardware and VMs have a
chance to complete it. Anyway, I can just change it by hand as you
suggest; no need to merge a change upstream just for this purpose.

> I'll investigate the failures as I have time.
>
>
> Thanks, I will also look into it. Let me know if there are any issues at the
> Scala side!

scala.actors.scheduler.ThreadPoolConfig.useForkJoin only tolerates Oracle,
Sun, and Apple, reminiscent of
https://issues.scala-lang.org/browse/SI-7236,
which causes concurrent-stream.scala to hang randomly. The workaround, of
course, is to just set it to true.

I've fixed a few more bugs on the Avian side, and I'm re-running the suite
now.

Simon Ochsenreither

unread,
Apr 18, 2013, 3:54:55 PM4/18/13
to av...@googlegroups.com, Simon Ochsenreither
Hi Joel,


Perhaps it would be better to specify a per-test time limit rather than a
total limit for the whole suite.  That way slower hardware and VMs have a
chance to complete it.

Will happen soon. Someone on the mailing list already offered to do it.

scala.actors.scheduler.ThreadPoolConfig.useForkJoin only tolerates Oracle,
Sun, and Apple, reminiscent of
https://issues.scala-lang.org/browse/SI-7236,
which causes concurrent-stream.scala to hang randomly.  The workaround, of
course, is to just set it to true.

I'll have a look at it. Scala actors are deprecated anyway. If Scala actors will still ship in 2.11, I'll fix it, if not, don't bother about it.

I've fixed a few more bugs on the Avian side, and I'm re-running the suite
now.

Cool! Let me know how it works out, I haven't set up the VM yet.

Thanks a lot any bye,

Simon

Simon Ochsenreither

unread,
Apr 18, 2013, 4:01:33 PM4/18/13
to av...@googlegroups.com, Simon Ochsenreither

I've fixed a few more bugs on the Avian side, and I'm re-running the suite
now.

Just looking at the recent commits, especially https://github.com/ReadyTalk/avian/commit/9918ea6cddd01648ce09cf9db7537174955fe21b

It seems Scala is a nice test-suite for Avian. :-)

Simon Ochsenreither

unread,
Apr 22, 2013, 5:45:52 PM4/22/13
to av...@googlegroups.com, Simon Ochsenreither
Hi Joel,

I installed the mentioned VM-with-absolutely-no-Java-except-Avian to run the tests and I'm finally seeing the issues you encountered. I can't believe that I wasted so much time not testing stuff I thought I was testing!

The pull request to add a --timeout option is already in the PR queue: https://github.com/scala/scala/pull/2418

I'll report back as soon as the option is included.

Did you find any issues on the Scala side which I can debug/triage/fix?

Bye,

Simon

Joel Dice

unread,
Apr 23, 2013, 12:13:42 AM4/23/13
to av...@googlegroups.com, Simon Ochsenreither
On Mon, 22 Apr 2013, Simon Ochsenreither wrote:

> The pull request to add a --timeout option is already in the PR queue:
> https://github.com/scala/scala/pull/2418
>
> I'll report back as soon as the option is included.

Cool, thanks.

> Did you find any issues on the Scala side which I can debug/triage/fix?

These are the failures I'm currently seeing:

!! 99 - run/t5375.scala [non-zero exit code]
!! 123 - run/t6488.scala [non-zero exit code]
!! 702 - run/stream_length.scala [non-zero exit code]
!! 897 - run/t4023.scala [output differs]
!! 1033 - run/t5353.scala [output differs]
!! 1277 - run/reflection-magicsymbols-invoke.scala [output differs]

There are probably more, but the timeout is still causing the suite to
exit prematurely, and I haven't bothered to change it yet.

t5375: our friend CompositeThrowable, which fails consistently on both
Avian and HotSpot on my machine

t6488: fails because scala.sys.process.ProcessImpl.SimpleProcess.destroy
uses Thread.stop, which is not implemented in Avian and probably never
will be. Any code that uses Thread.stop is broken and needs to be fixed.

stream_length: fails with an OOME; haven't studied it closely enough yet
to know why

t4023: expected output depends on Class.getDeclaredClasses returning an
array sorted in a certain order. Avian provides the same data as HotSpot
but in a different order, which appears to be valid since the JavaDoc says
nothing about the order. I think the test ought to explicitly sort the
array if it's going to rely on a specific order.

t5353 and reflection-magicsymbols-invoke: expected output depends on
ClassCastExceptions and CloneNotSupportedExceptions having certain message
formats, respectively. Avian uses different formats for the messages than
HotSpot, hence the failures. Again, this seems valid, since the messages
attached to exceptions thrown by the VM are not part of any specification
and may even change from one release to the next.

Simon Ochsenreither

unread,
Apr 23, 2013, 7:49:11 PM4/23/13
to av...@googlegroups.com, Simon Ochsenreither
Here are my failures:

  [partest] !! 269 - run/t5353.scala                           [output differs]
  [partest] !! 270 - run/reflection-magicsymbols-invoke.scala  [output differs]
  [partest] java.lang.OutOfMemoryError
  [partest]
  [partest] !! 345 - run/inline-ex-handlers.scala              [non-zero exit code]
  [partest] !! 486 - run/repl-javap-outdir-funs                [output differs]
  [partest] java.lang.RuntimeException: calibration failure
  [partest]     at scala.sys.package$.error(package.scala:27)
  [partest]     at Test$.calibrate(tailcalls.scala:298)
  [partest]     at Test$.main(tailcalls.scala:310)
  [partest]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  [partest]     at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:31)
  [partest]     at scala.tools.nsc.util.ScalaClassLoader$class.run(ScalaClassLoader.scala:68)
  [partest]     at scala.tools.nsc.CommonRunner$class.runAndCatch(ObjectRunner.scala:29)
  [partest]     at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:71)
  [partest]     at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:93)
  [partest]     at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:102)
  [partest] !! 525 - run/tailcalls.scala                       [non-zero exit code]
  [partest] !! 538 - run/repl-power.scala                      [non-zero exit code]
  [partest] java.lang.OutOfMemoryError
  [partest]
  [partest] !! 599 - run/t3502.scala                           [non-zero exit code]
  [partest] java.lang.OutOfMemoryError
  [partest]
  [partest] !! 653 - run/t6584.scala                           [non-zero exit code]
  [partest] java.lang.OutOfMemoryError
  [partest]
  [partest] !! 688 - run/t4294.scala                           [non-zero exit code]
  [partest] !! 711 - run/t6488.scala                           [non-zero exit code]
  [partest] !! 721 - run/shutdownhooks.scala                   [output differs]
  [partest] java.lang.RuntimeException: i div 37
  [partest]     at scala.sys.package$.error(package.scala:27)
  [partest]     at Test$$anonfun$main$1.apply$mcII$sp(t5375.scala:13)
  [partest]     at Test$$anonfun$main$1.apply(t5375.scala:13)
  [partest]     at scala.collection.parallel.immutable.ParRange$ParRangeIterator.map2combiner(ParRange.scala:104)
  [partest]     at scala.collection.parallel.ParIterableLike$Map.leaf(ParIterableLike.scala:1058)
  [partest]     at scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply$mcV$sp(Tasks.scala:54)
  [partest]     at scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply(Tasks.scala:53)
  [partest]     at scala.util.control.Breaks$$anon$1.catchBreak(Breaks.scala:62)
  [partest]     at scala.collection.parallel.Task$class.tryLeaf(Tasks.scala:56)
  [partest]     at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask$class.compute(Tasks.scala:155)
  [partest]     at scala.concurrent.forkjoin.RecursiveAction.exec(Unknown Source)
  [partest]     at scala.concurrent.forkjoin.ForkJoinTask.doExec(Unknown Source)
  [partest]     at scala.concurrent.forkjoin.ForkJoinTask.doJoin(Unknown Source)
  [partest]     at scala.concurrent.forkjoin.ForkJoinTask.join(Unknown Source)
  [partest]     at scala.collection.parallel.ForkJoinTasks$WrappedTask$class.sync(Tasks.scala:381)
  [partest]     at scala.collection.parallel.ForkJoinTasks$class.executeAndWaitResult(Tasks.scala:429)
  [partest]     at scala.collection.parallel.ParIterableLike$ResultMapping.leaf(ParIterableLike.scala:962)
  [partest]     at scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply$mcV$sp(Tasks.scala:54)
  [partest]     at scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply(Tasks.scala:53)
  [partest]     at scala.util.control.Breaks$$anon$1.catchBreak(Breaks.scala:62)
  [partest]     at scala.collection.parallel.Task$class.tryLeaf(Tasks.scala:56)
  [partest]     at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask$class.compute(Tasks.scala:155)
  [partest]     at scala.concurrent.forkjoin.RecursiveAction.exec(Unknown Source)
  [partest]     at scala.concurrent.forkjoin.ForkJoinTask.doExec(Unknown Source)
  [partest]     at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(Unknown Source)
  [partest]     at scala.concurrent.forkjoin.ForkJoinPool.runWorker(Unknown Source)
  [partest]     at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(Unknown Source)
  [partest] !! 751 - run/t5375.scala                           [non-zero exit code]                      
  [partest] !! 757 - run/t6439.scala                           [non-zero exit code]
  [partest] java.lang.ExceptionInInitializerError
  [partest]     at Test$delayedInit$body.apply(bitsets.scala:206)
  [partest]     at scala.Function0$class.apply$mcV$sp(Function0.scala:40)
  [partest]     at scala.App$$anonfun$main$1.apply(App.scala:71)
  [partest]     at scala.collection.immutable.List.foreach(List.scala:300)
  [partest]     at scala.App$class.main(App.scala:71)
  [partest]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  [partest]     at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:31)
  [partest]     at scala.tools.nsc.util.ScalaClassLoader$class.run(ScalaClassLoader.scala:68)
  [partest]     at scala.tools.nsc.CommonRunner$class.runAndCatch(ObjectRunner.scala:29)
  [partest]     at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:71)
  [partest]     at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:93)
  [partest]     at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:102)
  [partest] !! 771 - run/bitsets.scala                         [non-zero exit code]


Complete log: https://gist.github.com/soc/5448382

It seems to hang after test 889, no progress for multiple hours ... it's running almost 6 hours now.
Maybe the next partest update will help. (I suggested printing the test number/file name combo *before* running the actual test, so that one can easily see on which test the hang occurs.)

Joel Dice

unread,
Apr 23, 2013, 7:57:08 PM4/23/13
to av...@googlegroups.com, Simon Ochsenreither
On Tue, 23 Apr 2013, Simon Ochsenreither wrote:

> Complete log: https://gist.github.com/soc/5448382
>
> It seems to hang after test 889, no progress for multiple hours ... it's
> running almost 6 hours now.
> Maybe the next partest update will help. (I suggested printing the test
> number/file name combo *before* running the actual test, so that one can
> easily see on which test the hang occurs.)

I mentioned this earlier, but you may not have noticed it: PartestTask
does not pass -Xmx or -Xss flags to the java process which executes the
test, so you get Avian's default 128MB heap, which is not enough for many
of the tests, as you found. To fix it, you can either change the default
stack and heap sizes in Avian (look for 128 in jnienv.cpp) or modify
PartestTask (or build.xml, or whatever) to specify the appropriate flags.

On my machine, it's gone through the full suite with only one new error
besides the ones I last posted: repl-javap-outdir-funs, which is odd
because it was working okay when I ran it directly. The suite seems to be
running a second time now. Is this expected? Is it run twice with
different settings in each case?

Simon Ochsenreither

unread,
Apr 24, 2013, 4:22:50 AM4/24/13
to av...@googlegroups.com, Simon Ochsenreither
Hi Joel,


I mentioned this earlier, but you may not have noticed it: PartestTask
does not pass -Xmx or -Xss flags to the java process which executes the
test, so you get Avian's default 128MB heap, which is not enough for many
of the tests, as you found.  To fix it, you can either change the default
stack and heap sizes in Avian (look for 128 in jnienv.cpp) or modify
PartestTask (or build.xml, or whatever) to specify the appropriate flags.

Alright, I read it, but didn't realize that this issue had this impact on the tests.
I'll figure out what's the suggested (and supported) way to run ant/partest with other parameters.
 
On my machine, it's gone through the full suite with only one new error
besides the ones I last posted: repl-javap-outdir-funs, which is odd
because it was working okay when I ran it directly.

It's possible that running partest directly figures out a different classpath/tools.jar or something similar (I assume that the failure is something along the lines of "couldn't find javap").
 
The suite seems to be running a second time now.  Is this expected?
Is it run twice with different settings in each case?

No, I think that's a bug in partest: https://groups.google.com/d/topic/scala-internals/j8ml3WR41Vk/discussion

Bye,

Simon
 

Simon Ochsenreither

unread,
May 2, 2013, 10:51:38 AM5/2/13
to av...@googlegroups.com, Simon Ochsenreither
Hi Joel,

here is a short update:

A timeout option has been added recently. Syntax is --timeout "3 hours", translating that back to the Ant task, something like -Dpartest.timeout="3 hours" should work (no idea about the quoting, though).
Additionally, I fixed the issue with t4023.
A change for t6488 is in the pipeline, too.

I'll start a new test run and report back!

Thanks and bye,

Simon

Joel Dice

unread,
May 2, 2013, 11:30:50 AM5/2/13
to av...@googlegroups.com, Simon Ochsenreither
Hi Simon,

I did a complete run of the suite on Tuesday. Here are the failures:

!! 29 - run/t4294.scala [non-zero exit code]
!! 99 - run/t5375.scala [non-zero exit code]
!! 123 - run/t6488.scala [non-zero exit code]
!! 148 - run/repl-javap-outdir-funs [output differs]
!! 705 - run/stream_length.scala [non-zero exit code]
!! 900 - run/t4023.scala [non-zero exit code]
!! 1037 - run/t5353.scala [output differs]
!! 1 - instrumented/InstrumentationTest.scala [output differs]
!! 3 - instrumented/inline-in-constructors [output differs]

* t4294 and repl-javap-outdir-funs: I can't get these to fail when I run
them directly; they only fail in the suite, so I don't know of a practical
way to debug them

* instrumented/*: these are failing because Avian doesn't implement
java.lang.instrument or the -javaagent option. I'm not sure how much work
that would be, but probably not trivial, and it's not a high priority for
me.

I discussed the other failures ina a previous email.

Please let me know if you see different results from your run.

Simon Ochsenreither

unread,
May 10, 2013, 5:44:31 PM5/10/13
to av...@googlegroups.com, Simon Ochsenreither
Hi Joel,

sorry for my late reply, I've been pretty busy with other Scala-related stuff.

I have recompiled Avian with the heap set to 1GB and stack set to 1 MB in jnienv.cpp, here are my results of test/files/run:

  [partest] !!   43 - run/repl-javap-def.scala                  [output differs]
  [partest] !!  167 - run/repl-javap-outdir                     [output differs]
  [partest] !!  284 - run/t5353.scala                           [output differs]
  [partest] !!  285 - run/reflection-magicsymbols-invoke.scala  [output differs]
  [partest] !!  491 - run/repl-javap-outdir-funs                [output differs]
  [partest] !!  530 - run/tailcalls.scala                       [non-zero exit code]
  [partest] !!  629 - run/repl-javap-memfun.scala               [output differs]
  [partest] !!  645 - run/t6488.scala                           [non-zero exit code]
  [partest] !!  718 - run/t4294.scala                           [non-zero exit code]
  [partest] !!  753 - run/t5375.scala                           [non-zero exit code]
  [partest] !!  795 - run/repl-javap-mem.scala                  [output differs]
  [partest] !!  802 - run/shutdownhooks.scala                   [output differs]
  [partest] !!  814 - run/repl-javap.scala                      [output differs]
  [partest] !!  875 - run/repl-javap-fun.scala                  [output differs]
  [partest] !! 1108 - run/repl-javap-more-fun.scala             [output differs]

Full version: http://pastebin.com/xg7m3mNV

  * run/tailcalls.scala


Having only glanced at the code, I think the issue is that it tries to determine the stack size by running a recursive method which cannot be optimized by scalac, but happens to be optimized by Avian.
I'll either fix the test or make just it pass on Avian.

  * run/shutdownhooks.scala


The order in which the shutdown hooks are run seems to differ ... I'm not sure if this is specified by the JVM spec at all. On the other hand, they Thread.sleep values in the various threads should be large enough to guarantee the output order. Ideas?

  * t5375: our friend CompositeThrowable, which fails consistently on both
Avian and HotSpot on my machine

I'll fix this.

 
  * t6488: fails because scala.sys.process.ProcessImpl.
SimpleProcess.destroy
uses Thread.stop, which is not implemented in Avian and probably never
will be.  Any code that uses Thread.stop is broken and needs to be fixed.

Will be fixed, too.


  * stream_length: fails with an OOME; haven't studied it closely enough yet
to know why

I'm not seeing this one.
 

  * t4023: expected output depends on Class.getDeclaredClasses returning an
array sorted in a certain order.  Avian provides the same data as HotSpot
but in a different order, which appears to be valid since the JavaDoc says
nothing about the order.  I think the test ought to explicitly sort the
array if it's going to rely on a specific order.

This is fixed.


  * t5353 and reflection-magicsymbols-invoke: expected output depends on
ClassCastExceptions and CloneNotSupportedExceptions having certain message
formats, respectively.  Avian uses different formats for the messages than
HotSpot, hence the failures.  Again, this seems valid, since the messages
attached to exceptions thrown by the VM are not part of any specification
and may even change from one release to the next.

I agree that the actual message format is not specified and I can look into changing the tests so that the differences don't trigger a test failure, but I think modifying the error messages in Avian to line up with other implementations would simplify things, especially for people new to Avian. I can create the pull requests if you agree.
 

  * t4294 and repl-javap-outdir-funs: I can't get these to fail when I run
them directly; they only fail in the suite, so I don't know of a practical
way to debug them
 
I will look into this. The fact that it tries to select the Java 6 version of javap despite running on Java 7 could be a cause.


  * instrumented/*: these are failing because Avian doesn't implement
java.lang.instrument or the -javaagent option.  I'm not sure how much work
that would be, but probably not trivial, and it's not a high priority for
me.
 
Agree, I don't care much about it too. I'd just not run these tests on Avian.
 
Thanks and bye,

Simon

Simon Ochsenreither

unread,
May 14, 2013, 10:28:36 AM5/14/13
to av...@googlegroups.com, Simon Ochsenreither
Hi Joel,

status update:

  * run/tailcalls.scala
  * run/shutdownhooks.scala

Seems to work now, couldn't reproduce anymore.


* t5375: our friend CompositeThrowable, which fails consistently on both Avian and HotSpot on my machine

I'll fix this. Discussions about the best approach is still under way.


  * t6488: fails because scala.sys.process.ProcessImpl.SimpleProcess.destroy uses Thread.stop

I'll have a look what happened with the pull request.

 
  * t5353 and reflection-magicsymbols-invoke
 
  * t4294 and repl-javap-outdir-funs

I still need to investigate that.

files/run is pretty much done, files/jvm has +2 failing tests, including one which causes a core dump. I'll look into that.

Thanks and bye,

Simon

Joel Dice

unread,
May 14, 2013, 4:39:27 PM5/14/13
to av...@googlegroups.com, Simon Ochsenreither
On Tue, 14 May 2013, Simon Ochsenreither wrote:

> Fix pending: https://github.com/scala/scala/pull/2528
>
> � * run/shutdownhooks.scala
>
>
> Seems to work now, couldn't reproduce anymore.

Might have been fixed by
https://github.com/ReadyTalk/avian/commit/6507150246a936fb8f68f6a25a2ff5722a7e9451

> � * t5353 and reflection-magicsymbols-invoke
>
>
> PR: https://github.com/ReadyTalk/avian/pull/56

Merged. Thanks.

Simon Ochsenreither

unread,
May 18, 2013, 8:52:15 PM5/18/13
to av...@googlegroups.com, Simon Ochsenreither
Hi Joel,

taking all pending pull requests into account, I'm now down to 2 test failures for pos/neg/run/jvm: t4294 and repl-javap-outdir-fun.

The issue with repl-javap-outdir-fun seems to be that the :javap command can't find the class file to inspect (I created the class directly from the REPL and then it worked). This is weird and I think it is an issue on the Scala side.

t4294 fails with an OutOfMemoryError. I already tried to run it with a larger heap/stack, but this didn't change it.
The type in question, Stream, is a lazily evaluated, memoizising singly linked list. Therefore, it can be prone to eat up all memory if improperly used (== if one holds onto the head of the list although it is not used anymore), but the usage here seems to be fine. Method collect takes a partial function which serves as a predicate and causes the Stream to evaluate until the first element which satisfies the predicate is found. But this shouldn't cause excessive memory consumption, because each evaluated element can be thrown away if it doesn't satisfy the predicate, returning a new Stream which starts with the next number.
The associated issue is interesting, too: https://issues.scala-lang.org/browse/SI-4294

What do you think? Could it be an issue with the garbage collector?

Thanks and bye,

Simon

Simon Ochsenreither

unread,
May 19, 2013, 7:41:11 AM5/19/13
to av...@googlegroups.com, Simon Ochsenreither
As far as I have investigated, the implementation seems to be carefully designed to prevent both StackOverflows and OutOfMemoryErrors: https://github.com/scala/scala/blob/master/src/library/scala/collection/immutable/Stream.scala#L384

In fact, I'm running (Stream.from(1).collect{case x if x > Int.MaxValue-2 => x}: Stream[Int]) right now on HotSpot and memory usage is constant.

Weird: If I run the same expression in the Scala REPL on Avian I'm seeing an ExceptionInInitializerError instead of an OutOfMemoryError ... not sure if this is just a result of the latter:

scala> (Stream.from(1).collect{case x if x > Int.MaxValue-2 => x}: Stream[Int])
java.lang.ExceptionInInitializerError
    at .$print$lzycompute(<console>:7)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at scala.tools.nsc.interpreter.IMain$Request.loadAndRun(IMain.scala:976)
    at scala.tools.nsc.interpreter.IMain$WrappedRequest$$anonfun$loadAndRunReq$1.apply(IMain.scala:623)
    at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:31)
    at scala.tools.nsc.interpreter.IMain$WrappedRequest.loadAndRunReq(IMain.scala:622)
    at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:541)
    at scala.tools.nsc.interpreter.ILoop.reallyInterpret$1(ILoop.scala:574)
    at scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:619)
    at scala.tools.nsc.interpreter.ILoop.command(ILoop.scala:531)
    at scala.tools.nsc.interpreter.ILoop.processLine(ILoop.scala:387)
    at scala.tools.nsc.interpreter.ILoop.loop(ILoop.scala:404)
    at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply$mcZ$sp(ILoop.scala:687)
    at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:673)
    at scala.tools.nsc.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:95)
    at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:673)
    at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:81)
    at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:94)
    at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:103)


Thanks and bye,

Simon

Joel Dice

unread,
May 20, 2013, 1:35:49 PM5/20/13
to av...@googlegroups.com, Simon Ochsenreither
On Sun, 19 May 2013, Simon Ochsenreither wrote:

> As far as I have investigated, the implementation seems to be carefully
> designed to prevent both StackOverflows and OutOfMemoryErrors:https://github.com/scala/scala/blob/master/src/library/scala/collection/imm
> utable/Stream.scala#L384

Unfortunately, Avian is not currently smart enough to determine the exact
lifetime of each local/stack reference, and therefore considers the "this"
refererence to be reachable throughout the body of Stream.collect.
That's something I'd like to fix, but I don't know of an efficient way to
do it.

Simon Ochsenreither

unread,
May 20, 2013, 3:51:07 PM5/20/13
to av...@googlegroups.com
Hi Joel,

Unfortunately, Avian is not currently smart enough to determine the exact
lifetime of each local/stack reference, and therefore considers the "this"
reference to be reachable throughout the body of Stream.collect.
That's something I'd like to fix, but I don't know of an efficient way to
do it.

Ok, thanks for letting me know!

I'm not sure whether it is possible/viable to rewrite the collect implementation any further considering that people worked a lot on trying to avoid situations like that.

I think it is a minor issue anyway, so I probably just make this test skip on Avian for now.

Thanks and bye!

Simon

Joel Dice

unread,
May 20, 2013, 5:42:29 PM5/20/13
to av...@googlegroups.com
On Mon, 20 May 2013, Simon Ochsenreither wrote:

> I'm not sure whether it is possible/viable to rewrite the collect
> implementation any further considering that people worked a lot on trying to
> avoid situations like that.

Yeah, I can't think of a way to do it without changing the API and making
collect a non-member function which takes a Stream reference as an
explicit parameter.

> I think it is a minor issue anyway, so I probably just make this test skip
> on Avian for now.

Sounds good. Meanwhile, I'll think some more about how to address this in
Avian. The JIT compiler technically already has the information we need;
it's just not available at the point where the GC root maps for stack
frames are generated. I've been wanting to rework that code anyway, and
this is another good reason to do it.
It is loading more messages.
0 new messages