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