mirror of https://github.com/sbt/sbt.git
To minimize classloading and consistency between sbt instances launched with the latest launcher compared to old launchers, I overhauled code that replaces the app configuration and meta build classloader at startup. The goals of this change for legacy launchers were: 1) Do not ever load the scala-library.jar from the app provider class loader. 2) Close the class loaders that are below the topLoader in the class loading hierarcy For the new launcher, we simply want to avoid modifying the loader at all. I added the SbtParserInit class so that it was more straightforward to preload the global instance using reflection. We now use reflection to instantiate an SbtParserInit instance for both the legacy and new launcher cases to simplify the logic. After this change, the legacy loader still uses somewhat more metaspace than the new loader, but the difference seems to be O(10MB), which should only impact projects that were close their MaxMetaspaceSize to begin with. I verified using javap that none of the code in this class uses the scala standard library which should help metaspace since we don't load much of the scala standard library until we enter xMainImpl.run. |
||
|---|---|---|
| .. | ||
| src | ||
| NOTICE | ||