RFR: JDK-8144039: Enable javac server by default

Erik Joelsson erik.joelsson at oracle.com
Thu Nov 26 08:17:30 UTC 2015


Hello,

This is not sjavac, but just the rather new feature javac-server. It 
takes the client/server model from sjavac and applies it to plain old 
javac. What this means is that when we invoke javac, it will spawn off a 
background server process that stays alive for the duration of the 
build. All javac compilations are then sent to this server for 
processing from a very thin client. The performance gain comes from 
running all javac compilations in a warm JVM.

I believe this has been tested enough to try it as default. If things 
fail for a certain usecase, the feature can easily be turned off with 
--disable-javac-server. If things go really haywire, we can disable it 
again. If we didn't change this now, before feature freeze, it would 
never get into JDK9, and I think that would be very sad as faster build 
times is generally something everyone wants.

I will compose an email to jdk9-dev announcing this change.

/Erik

On 2015-11-26 05:57, David Holmes wrote:
> Hi Erik, Magnus,
>
> Has this been extensively tested with all our build environments?
>
> It's been a while so could you give an overview of exactly how the 
> sjavac thing works.
>
> Changes that affect every single person building the JDK should not be 
> rushed through!
>
> Thanks,
> David
>
> On 26/11/2015 12:47 AM, Magnus Ihse Bursie wrote:
>> On 2015-11-25 15:45, Erik Joelsson wrote:
>>> Doh, here you go:
>>>
>>> diff -r 358fb90ae6e6 common/autoconf/build-performance.m4
>>> --- a/common/autoconf/build-performance.m4
>>> +++ b/common/autoconf/build-performance.m4
>>> @@ -411,9 +411,9 @@
>>>    AC_MSG_RESULT([$ENABLE_SJAVAC])
>>>    AC_SUBST(ENABLE_SJAVAC)
>>>
>>> -  AC_ARG_ENABLE([javac-server], 
>>> [AS_HELP_STRING([--enable-javac-server],
>>> -      [use only the server part of sjavac for faster javac compiles
>>> @<:@disabled@:>@])],
>>> -      [ENABLE_JAVAC_SERVER="${enableval}"], 
>>> [ENABLE_JAVAC_SERVER="no"])
>>> +  AC_ARG_ENABLE([javac-server],
>>> [AS_HELP_STRING([--disable-javac-server],
>>> +      [disable javac server @<:@enabled@:>@])],
>>> +      [ENABLE_JAVAC_SERVER="${enableval}"], 
>>> [ENABLE_JAVAC_SERVER="yes"])
>>>    if test "x$JVM_ARG_OK" = "xfalse"; then
>>>      AC_MSG_WARN([Could not set -Xms${MS_VALUE}M -Xmx${MX_VALUE}M,
>>> disabling javac server])
>>>      ENABLE_JAVAC_SERVER="no"
>>>
>> Looks good to me.
>>
>> /Magnus
>>
>>> /Erik
>>>
>>> On 2015-11-25 15:38, Magnus Ihse Bursie wrote:
>>>> On 2015-11-25 15:11, Erik Joelsson wrote:
>>>>> Hello,
>>>>>
>>>>> The --enable-javac-server feature seems to be working well and is
>>>>> providing considerable speedup when building the JDK. We should make
>>>>> the option enabled by default.
>>>>>
>>>>> As an example, on my local machine, a run of "make exploded-image"
>>>>> without javac server took 00:04:09 and with javac server 00:03:20.
>>>>> On machines with less cpus I have seen even bigger improvements.
>>>>>
>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8144039
>>>>> Patch:
>>>>> diff -r 358fb90ae6e6 common/autoconf/build-performance.m4
>>>>> --- a/common/autoconf/build-performance.m4
>>>>> +++ b/common/autoconf/build-performance.m4
>>>>> @@ -413,7 +413,7 @@
>>>>>
>>>>>    AC_ARG_ENABLE([javac-server],
>>>>> [AS_HELP_STRING([--enable-javac-server],
>>>>>        [use only the server part of sjavac for faster javac compiles
>>>>> @<:@disabled@:>@])],
>>>>> -      [ENABLE_JAVAC_SERVER="${enableval}"],
>>>>> [ENABLE_JAVAC_SERVER="no"])
>>>>> +      [ENABLE_JAVAC_SERVER="${enableval}"],
>>>>> [ENABLE_JAVAC_SERVER="yes"])
>>>>>    if test "x$JVM_ARG_OK" = "xfalse"; then
>>>>>      AC_MSG_WARN([Could not set -Xms${MS_VALUE}M -Xmx${MX_VALUE}M,
>>>>> disabling javac server])
>>>>>      ENABLE_JAVAC_SERVER="no"
>>>>> diff -r 358fb90ae6e6 common/autoconf/generated-configure.sh
>>>>
>>>> I like that you enable javac-server by default. But the patch was a
>>>> bit too hurried. :)
>>>>
>>>> When you change the default value, you are also in fact reversing the
>>>> logic of the configure option. As in other such options, the string
>>>> listed for AS_HELP_STRING should be "--disable-javac-server", and the
>>>> default value listed should be "enabled".
>>>>
>>>> /Magnus
>>>
>>




More information about the build-dev mailing list