RFR: JDK-8171294: Slow compilation with long classpaths under JDK 9

Jan Lahoda jan.lahoda at oracle.com
Tue Jan 24 14:35:23 UTC 2017


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?


More information about the compiler-dev mailing list