RFR: JDK-8171294: Slow compilation with long classpaths under JDK 9
jonathan.gibbons at oracle.com
Wed Feb 1 01:52:01 UTC 2017
On 01/24/2017 06:35 AM, Jan Lahoda wrote:
> As reported:
> javac has a problem with compiling with many jars on classpath. The
> problem is twofold:
> a) there is JavacFileManager.ArchiveContainer.pathCache, and this
> cache keeps entries not only for path that are in the given
> archive/jar, but also for those that are not in it, which may consume
> too much memory
> b) when listing a package, for each archive/jar, an equivalent of
> Files.exists(Path.resolve(String)) is done, which takes some time, and
> this is repeated a lot of times (and most of the time, the package
> does not exist in the given jar).
> The proposed patch is basically Maurizio's patch that lists packages
> on opening and then can quickly decide if a given archive/jar contains
> the given package or not. The biggest change from the original patch
> is that the packages are computed immediately when the
> ArchiveContainer is created, as opposed to compute them lazily. The
> reason is that the Containers are created lazily, and are used
> immediately after being created.
> How does this look?
The basic patch looks look.
The extended discussion with respect to multi-release jars, and whether
the jar file system is
reporting the correct packages to javac is a separate discussion.
More information about the compiler-dev