Skip to content

To fork or not to fork (javac) #30451

@ywelsch

Description

@ywelsch

In order to speed up compilation on CI I think we should stop forking the java compiler. My tests on a 6 core machine show that this could give us a 2x speed-up.

Not forking for compilation:

./gradlew clean compileJava compileTestJava
5m 11s

./gradlew clean compileJava compileTestJava --parallel
2m 59s

Forking for compilation:

./gradlew clean compileJava compileTestJava
1m 55s

./gradlew clean compileJava compileTestJava --parallel
1m 26s

The code where we do forking has the comment

// we fork because compiling lots of different classes in a shared jvm can eventually trigger GC overhead limitations

but I have not seen such issues. If we run ./gradlew clean compileJava compileTestJava --parallel in a separate build step (for example in elasticsearch-ci), then this should pose no issue. We could also make this a configurable thing (-Pfork.compiler=false) so the fast mode can be enabled for people that want faster compilation.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions