RFR: JDK-8166965: Some small java build tools are still running with big JVM configuration

Erik Joelsson erik.joelsson at oracle.com
Mon Oct 3 08:30:42 UTC 2016

On 2016-10-03 09:04, Magnus Ihse Bursie wrote:
> On 2016-09-30 16:45, Erik Joelsson wrote:
>> A while back, we introduced the JAVA_SMALL configuration in the 
>> build, which improved build performance and reduced resource usage 
>> for several small java instances. However, it was never fully applied 
>> to all command lines where it would fit.
>> I have looked through the entire build and measured performance with 
>> the current "BIG" configuration vs the "SMALL" one. In all cases, the 
>> small config won, especially when measuring total user time, but also 
>> for wall clock time. The total impact on a full build is of course 
>> small, since we already hit the low hanging fruit previously, but 
>> it's still nice to take this optimization all the way.
>> On my Linux workstation, I save about 3 minutes of user time and a 
>> few seconds of wall clock. On a macpro, 2 minutes of user time and a 
>> few seconds of wall clock.
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8166965
>> Webrev: http://cr.openjdk.java.net/~erikj/8166965/webrev.01
> Looks good to me. Thanks for continuing to improve performance!
> Just a few questions:
> * I can't see how the changes in MainSupport.gmk fits in. Is that a 
> separate issue you fixed?
Right, that is actually unrelated. As I was trying to isolate certain 
build steps, I couldn't run targets like "jdk.compiler-gensrc-langtools" 
in isolation, because the NO_RECIPES check would prevent them from being 
exported to Init.gmk. I could only run jdk.compiler-gensrc, but then 
that target triggered a pretty big chain of dependencies 
(buildtools-jdk, interim-langtools) that ruined my measurements. This 
change fixes the exporting of repo specific targets to Init.gmk.
> * Where do we have the "big" configuration? The module compilations? 
> Elsewhere?
The big Javadoc invocation uses and needs it. When not using the javac 
server, the module compilations use it. The javac server has its own set 
of flags.


More information about the build-dev mailing list