mirror of https://github.com/sbt/sbt.git
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. |
||
|---|---|---|
| cache | ||
| compile | ||
| interface | ||
| ivy | ||
| launch | ||
| licenses | ||
| main | ||
| notes | ||
| project | ||
| run | ||
| sbt | ||
| sbt-maven-resolver/src | ||
| scripted | ||
| src/main/conscript | ||
| tasks | ||
| testing | ||
| util | ||
| .gitattributes | ||
| .gitignore | ||
| .java-version | ||
| .travis.yml | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| NOTICE | ||
| README.md | ||
| api.specification | ||
| build.sbt | ||
| scripted.specification | ||
README.md
sbt
sbt is a build tool for Scala, Java, and more.
For general documentation, see http://www.scala-sbt.org/.
Issues and Pull Requests
Please read CONTRIBUTING carefully before opening a GitHub Issue.
The short version: try StackOverflow and sbt-dev. Don't open an Issue.
sbt 0.13
This is the 0.13.x series of sbt.
- Setup: Describes getting started with the latest binary release.
- FAQ: Explains how to get help and more.
- Google Code: hosts sbt 0.7.7 and earlier versions
license
See LICENSE.