2011-07-28 35 views
8

Tôi đang sử dụng Scala 2.9.0.final trên Ubuntu 11.04. Bắt đầu scala từ dòng lệnh mất khoảng 20 giây trước khi một lời nhắc xuất hiện.Scala REPL ~ 20 giây để khởi động - điều này có bình thường không?

Tôi nhận ra mình nên chờ đợi một chút vì nó phải dẫn các tệp JAR của trình biên dịch, nhưng tôi có một thời gian khó tin rằng nó phải là 20 giây - tôi lo rằng tôi có thể đã cấu hình sai.

CHỈNH SỬA

Vì vậy, tôi đã thử jstack và nó mang lại đầu ra dài hơn đầu tôi. Tôi thấy một sợi chỉ đang chờ một mutex. Nhưng nhìn vào sản lượng từ time:

21.96s user 0.66s system 135% cpu 16.711 total 

Có vẻ như nó đã dành một số tiền khá chu kỳ trên cả hai lõi ... như vậy có lẽ nó không chỉ chặn trên một mutex cho thời điểm đó?

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

Nó sẽ mở trong nháy mắt trên máy tính của tôi (Scala 2.7.7final, Ubuntu 11.04). Bạn có thể cố gắng nắm bắt vài bãi chứa ngăn xếp của trình thông dịch khởi tạo không? Sử dụng 'jps' và' jstack'. –

+0

Điều này hầu như không bình thường. Giả sử phần cứng của bạn không bị hỏng và bạn không chạy bộ khởi động Intel 80386 sẽ khá nhanh. Bạn có thể thử RC mới nhất của 2.9.1 và kiểm tra xem nó có tốt hơn không. – soc

+1

Scala 2.9.0 bắt đầu chậm hơn nhiều so với 2.8.1. Điều này sẽ được giải quyết trong Scala 2.9.1 AFAIK. Trên máy tính OS X 2.66 GHz của tôi, phải mất 6 giây, điều này đã chậm chạp. 2.8.1 trong so sánh mất 2 giây! Nhưng 20 giây có vẻ như bạn có vấn đề nghiêm trọng –

Trả lời

5

Thời gian khởi động sẽ được giảm trong bản phát hành sắp tới 2.9.1. Nếu bạn muốn bạn có thể kiểm tra bằng cách tải xuống RC tại đây: http://www.scala-lang.org/downloads

+0

Cảm ơn; Tôi sẽ cung cấp cho RC một shot và xem nếu nó làm cho một sự khác biệt. – Owen

+0

2.9.1 thực sự bắt đầu nhanh hơn đáng kể. Cảm ơn bạn. – Owen

+0

Rất vui khi nó hoạt động cho bạn;) – AndreasScheinert

Các vấn đề liên quan