Scala REPL ~ 20 секунд до запуска - это нормально?

Я использую Scala 2.9.0.final в Ubuntu 11.04. Запуск scala из командной строки занимает около 20 секунд, прежде чем появится подсказка.

Я понимаю, что мне следует ожидать некоторой задержки, потому что она должна приводить файлы JAR компилятора, но мне трудно поверить, что это должно быть 20 секунд - я беспокойтесь, что у меня что-то настроено неправильно.

EDIT

Итак, я попробовал jstack, и он дает длинный вывод, который у меня над головой. Я вижу один поток, ожидающий мьютекса. Но если посмотреть на результат time :

21.96s user 0.66s system 135% cpu 16.711 total

Казалось бы, он потратил приличное количество циклов на оба ядра ... так что, может быть, это не просто блокировка мьютекса на то время?

2011-07-28 11:45:02
Full thread dump OpenJDK 64-Bit Server VM (20.0-b11 mixed mode):

"Attach Listener" daemon prio=10 tid=0x00000000023ea000 nid=0x19a9 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Thread-0" prio=10 tid=0x00007f7768304800 nid=0x19a8 runnable [0x00007f776cd92000]
   java.lang.Thread.State: RUNNABLE
    at scala.collection.generic.Growable$$anonfun$$plus$plus$eq$1.<init>(Growable.scala:48)
    at scala.collection.generic.Growable$class.$plus$plus$eq(Growable.scala:48)
    at scala.collection.mutable.ListBuffer.$plus$plus$eq(ListBuffer.scala:128)
    at scala.collection.TraversableOnce$class.toList(TraversableOnce.scala:242)
    at scala.collection.mutable.WrappedArray.toList(WrappedArray.scala:33)
    at scala.collection.immutable.List$.apply(List.scala:434)
    at scala.Option.toList(Option.scala:231)
    at scala.tools.nsc.util.DirectoryClassPath.asURLs(ClassPath.scala:321)
    at scala.tools.nsc.util.ClassPath.sortString(ClassPath.scala:284)
    at scala.tools.nsc.util.ClassPath.hashCode(ClassPath.scala:289)
    at scala.collection.mutable.FlatHashTable$HashUtils$class.elemHashCode(FlatHashTable.scala:349)
    at scala.collection.mutable.HashSet.elemHashCode(HashSet.scala:39)
    at scala.collection.mutable.FlatHashTable$class.containsEntry(FlatHashTable.scala:109)
    at scala.collection.mutable.HashSet.containsEntry(HashSet.scala:39)
    at scala.collection.mutable.HashSet.contains(HashSet.scala:55)
    at scala.collection.GenSetLike$class.apply(GenSetLike.scala:44)
    at scala.collection.mutable.HashSet.apply(HashSet.scala:39)
    at scala.collection.SeqLike$$anonfun$distinct$1.apply(SeqLike.scala:505)
    at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
    at scala.collection.immutable.List.foreach(List.scala:45)
    at scala.collection.SeqLike$class.distinct(SeqLike.scala:504)
    at scala.collection.immutable.List.distinct(List.scala:45)
    at scala.tools.util.PathResolver$Calculated$.containers(PathResolver.scala:206)
    - locked <0x00000000faba8098> (a scala.tools.util.PathResolver$Calculated$)
    at scala.tools.util.PathResolver.containers(PathResolver.scala:228)
    at scala.tools.util.PathResolver.result(PathResolver.scala:231)
    - locked <0x00000000faba8050> (a scala.tools.util.PathResolver)
    at scala.tools.nsc.backend.JavaPlatform$class.classPath(JavaPlatform.scala:18)
    at scala.tools.nsc.Global$$anon$2.classPath(Global.scala:54)
    - locked <0x00000000faba7ff0> (a scala.tools.nsc.Global$$anon$2)
    at scala.tools.nsc.backend.JavaPlatform$class.rootLoader(JavaPlatform.scala:19)
    at scala.tools.nsc.Global$$anon$2.rootLoader(Global.scala:54)
    at scala.tools.nsc.Global$$anon$2.rootLoader(Global.scala:54)
    at scala.tools.nsc.Global.rootLoader(Global.scala:57)
    at scala.tools.nsc.symtab.Definitions$definitions$.RootClass(Definitions.scala:138)
    - locked <0x00000000faba5620> (a scala.tools.nsc.symtab.Definitions$definitions$)
    at scala.tools.nsc.symtab.Definitions$definitions$.EmptyPackage(Definitions.scala:141)
    - locked <0x00000000faba5620> (a scala.tools.nsc.symtab.Definitions$definitions$)
    at scala.tools.nsc.symtab.Definitions$definitions$.EmptyPackageClass(Definitions.scala:142)
    - locked <0x00000000faba5620> (a scala.tools.nsc.symtab.Definitions$definitions$)
    at scala.tools.nsc.symtab.Definitions$definitions$.init(Definitions.scala:804)
    at scala.tools.nsc.Global$Run.<init>(Global.scala:693)
    at scala.tools.nsc.interpreter.IMain.scala$tools$nsc$interpreter$IMain$$_initialize(IMain.scala:120)
    at scala.tools.nsc.interpreter.IMain$$anonfun$initialize$1.apply$mcZ$sp(IMain.scala:154)
    at scala.tools.nsc.interpreter.IMain$$anonfun$initialize$2.apply(IMain.scala:154)
    at scala.tools.nsc.interpreter.IMain$$anonfun$initialize$2.apply(IMain.scala:154)
    at scala.concurrent.ThreadRunner$$anon$2$$anonfun$run$2.apply(ThreadRunner.scala:45)
    at scala.concurrent.ThreadRunner.scala$concurrent$ThreadRunner$$tryCatch(ThreadRunner.scala:31)
    at scala.concurrent.ThreadRunner$$anon$2.run(ThreadRunner.scala:45)
    at java.lang.Thread.run(Thread.java:679)

"Low Memory Detector" daemon prio=10 tid=0x00007f77680b9000 nid=0x1996 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread1" daemon prio=10 tid=0x00007f77680b6800 nid=0x1995 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" daemon prio=10 tid=0x00007f77680b3800 nid=0x1994 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" daemon prio=10 tid=0x00007f77680b2000 nid=0x1993 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Finalizer" daemon prio=10 tid=0x00007f7768092800 nid=0x1992 in Object.wait() [0x00007f776e27c000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x00000000fb2d82d0> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:133)
    - locked <0x00000000fb2d82d0> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:149)
    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:177)

"Reference Handler" daemon prio=10 tid=0x00007f7768091000 nid=0x1991 in Object.wait() [0x00007f776e37d000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x00000000fb2d8370> (a java.lang.ref.Reference$Lock)
    at java.lang.Object.wait(Object.java:502)
    at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
    - locked <0x00000000fb2d8370> (a java.lang.ref.Reference$Lock)

"main" prio=10 tid=0x0000000001db4800 nid=0x198d in Object.wait() [0x00007f7775067000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x00000000fab8d110> (a scala.concurrent.SyncVar)
    at java.lang.Object.wait(Object.java:502)
    at scala.concurrent.SyncVar.get(SyncVar.scala:22)
    - locked <0x00000000fab8d110> (a scala.concurrent.SyncVar)
    at scala.concurrent.ThreadRunner$$anonfun$submit$1.apply(ThreadRunner.scala:48)
    at scala.Function0$class.apply$mcZ$sp(Function0.scala:34)
    at scala.runtime.AbstractFunction0.apply$mcZ$sp(AbstractFunction0.scala:12)
    at scala.tools.nsc.interpreter.IMain.global(IMain.scala:162)
    - locked <0x00000000fb2d8580> (a scala.tools.nsc.interpreter.ILoop$ILoopInterpreter)
    at scala.tools.nsc.interpreter.JLineCompletion.<init>(JLineCompletion.scala:17)
    at scala.tools.nsc.interpreter.ILoop.chooseReader(ILoop.scala:791)
    at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:807)
    at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:67)
    at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:80)
    at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:89)
    at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)

"VM Thread" prio=10 tid=0x00007f776808a000 nid=0x1990 runnable 

"GC task thread#0 (ParallelGC)" prio=10 tid=0x0000000001dc0000 nid=0x198e runnable 

"GC task thread#1 (ParallelGC)" prio=10 tid=0x0000000001dc1800 nid=0x198f runnable 

"VM Periodic Task Thread" prio=10 tid=0x00007f77680bb800 nid=0x1997 waiting on condition 

JNI global references: 1010
8
задан hammar 28 July 2011 в 16:30
поделиться