sbt/util/classpath/src/main/scala/sbt
Jason Zaugg 5005abfef2 SD-232 Recycle classloaders to be anti-hostile to JIT.
The compiler interface subclasses `scala.tools.nsc.Global`,
and loading this new subclass before each `compile` task forces
HotSpot JIT to deoptimize larges swathes of compiled code. It's
a bit like SBT has rigged the dice to always descend the longest
ladder in a game of Snakes and Ladders.

The slowdown seems to be larger with Scala 2.12. There are a number
of variables at play, but I think the main factor here is that
we now rely on JIT to devirtualize calls to final methods in traits
whereas we used to emit static calls. JIT does a good job at this,
so long as classloading doesn't undo that good work.

This commit extends the existing `ClassLoaderCache` to encompass
the classloader that includes the compiler interface JAR. I've
resorted to adding a var to `AnalyzingCompiler` to inject the
dependency to get the cache to the spot I need it without binary
incompatible changes to the intervening method signatures.
2016-09-26 14:49:47 +10:00
..
classpath SD-232 Recycle classloaders to be anti-hostile to JIT. 2016-09-26 14:49:47 +10:00
ModuleUtilities.scala Fix several warnings 2015-07-17 09:17:42 +02:00
ReflectUtilities.scala Simplify operations on collections 2015-08-01 02:25:17 +02:00
ScalaInstance.scala Make sbt aware of Dotty 2016-01-03 20:35:29 +01:00