When running Javac and related tools, use -XX:+TieredCompilation -XX:TieredStopAtLevel=1 instead of -client, as the latter is ignored on 64-bit JVMs since at least JDK 6.
The new flags have been shown to cut down CPU time by 50% due to reduced time spent in JIT and improving overall run time for short running actions, some times also cutting them in half.
--
MOS_MIGRATED_REVID=127536578
diff --git a/scripts/bootstrap/compile.sh b/scripts/bootstrap/compile.sh
index ff81f27..1714cda 100755
--- a/scripts/bootstrap/compile.sh
+++ b/scripts/bootstrap/compile.sh
@@ -266,7 +266,7 @@
# bazel build using bootstrap version
function bootstrap_build() {
"${JAVA_HOME}/bin/java" \
- -client -Xms256m -XX:NewRatio=4 -XX:+HeapDumpOnOutOfMemoryError -Xverify:none -Dfile.encoding=ISO-8859-1 \
+ -XX:+HeapDumpOnOutOfMemoryError -Xverify:none -Dfile.encoding=ISO-8859-1 \
-XX:HeapDumpPath=${OUTPUT_DIR} \
-Djava.util.logging.config.file=${OUTPUT_DIR}/javalog.properties \
-Dio.bazel.EnableJni=0 \
diff --git a/src/java_tools/buildjar/BUILD b/src/java_tools/buildjar/BUILD
index 5c379c0..880c13d 100644
--- a/src/java_tools/buildjar/BUILD
+++ b/src/java_tools/buildjar/BUILD
@@ -56,7 +56,10 @@
ijar = ["//third_party/ijar"],
javabuilder = ["bootstrap_deploy.jar"],
javac = ["//third_party/java/jdk/langtools:javac_jar"],
- jvm_opts = ["-client"],
+ jvm_opts = [
+ "-XX:+TieredCompilation",
+ "-XX:TieredStopAtLevel=1",
+ ],
singlejar = ["//src/java_tools/singlejar:bootstrap_deploy.jar"],
source_version = "8",
target_version = "8",
@@ -72,7 +75,10 @@
ijar = ["//third_party/ijar"],
javabuilder = ["//third_party/java/jdk/javabuilder:JavaBuilder_0.1.0"],
javac = ["//third_party/java/jdk/langtools:javac7_jar"],
- jvm_opts = ["-client"],
+ jvm_opts = [
+ "-XX:+TieredCompilation",
+ "-XX:TieredStopAtLevel=1",
+ ],
singlejar = ["//src/java_tools/singlejar:bootstrap_deploy.jar"],
source_version = "7",
target_version = "7",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java
index 21b94c9..97a05f2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java
@@ -38,13 +38,11 @@
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.PathFragment;
-
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-
import javax.annotation.Nullable;
/**
@@ -55,11 +53,6 @@
*/
public final class JavaCompilationHelper extends BaseJavaCompilationHelper {
- /**
- * Maximum memory to use for GenClass for generating the gen jar.
- */
- private static final String GENCLASS_MAX_MEMORY = "-Xmx64m";
-
private JavaTargetAttributes.Builder attributes;
private JavaTargetAttributes builtAttributes;
private final ImmutableList<String> customJavacOpts;
@@ -76,7 +69,7 @@
this.implicitAttributesSuffix = implicitAttributesSuffix;
this.attributes = attributes;
this.customJavacOpts = javacOpts;
- this.customJavacJvmOpts = javaToolchain.getJavacJvmOptions();
+ this.customJavacJvmOpts = javaToolchain.getJvmOptions();
this.semantics = semantics;
}
@@ -353,25 +346,32 @@
*/
public void createGenJarAction(Artifact classJar, Artifact manifestProto,
Artifact genClassJar) {
- getRuleContext().registerAction(new SpawnAction.Builder()
- .addInput(manifestProto)
- .addInput(classJar)
- .addOutput(genClassJar)
- .addTransitiveInputs(getHostJavabaseInputsNonStatic(getRuleContext()))
- .setJarExecutable(
- getRuleContext().getHostConfiguration().getFragment(Jvm.class).getJavaExecutable(),
- getGenClassJar(ruleContext),
- ImmutableList.of("-client", GENCLASS_MAX_MEMORY))
- .setCommandLine(CustomCommandLine.builder()
- .addExecPath("--manifest_proto", manifestProto)
- .addExecPath("--class_jar", classJar)
- .addExecPath("--output_jar", genClassJar)
- .add("--temp_dir").addPath(tempDir(genClassJar))
- .build())
- .useParameterFile(ParameterFileType.SHELL_QUOTED)
- .setProgressMessage("Building genclass jar " + genClassJar.prettyPrint())
- .setMnemonic("JavaSourceJar")
- .build(getRuleContext()));
+ getRuleContext()
+ .registerAction(
+ new SpawnAction.Builder()
+ .addInput(manifestProto)
+ .addInput(classJar)
+ .addOutput(genClassJar)
+ .addTransitiveInputs(getHostJavabaseInputsNonStatic(getRuleContext()))
+ .setJarExecutable(
+ getRuleContext()
+ .getHostConfiguration()
+ .getFragment(Jvm.class)
+ .getJavaExecutable(),
+ getGenClassJar(ruleContext),
+ javaToolchain.getJvmOptions())
+ .setCommandLine(
+ CustomCommandLine.builder()
+ .addExecPath("--manifest_proto", manifestProto)
+ .addExecPath("--class_jar", classJar)
+ .addExecPath("--output_jar", genClassJar)
+ .add("--temp_dir")
+ .addPath(tempDir(genClassJar))
+ .build())
+ .useParameterFile(ParameterFileType.SHELL_QUOTED)
+ .setProgressMessage("Building genclass jar " + genClassJar.prettyPrint())
+ .setMnemonic("JavaSourceJar")
+ .build(getRuleContext()));
}
/** Returns the GenClass deploy jar Artifact. */
@@ -441,7 +441,7 @@
builder.setClassDirectory(classDir(resourceJar));
builder.setJavaBuilderJar(javaToolchain.getJavaBuilder());
builder.setJavacOpts(getDefaultJavacOptsFromRule(getRuleContext()));
- builder.setJavacJvmOpts(javaToolchain.getJavacJvmOptions());
+ builder.setJavacJvmOpts(javaToolchain.getJvmOptions());
getAnalysisEnvironment().registerAction(builder.build());
return resourceJar;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileActionBuilder.java
index 0d0a53f..8fb7823 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileActionBuilder.java
@@ -269,7 +269,7 @@
":java_toolchain" + implicitAttributesSuffix, Mode.TARGET, JavaToolchainProvider.class);
List<String> jvmArgs =
ImmutableList.<String>builder()
- .addAll(javaToolchain.getJavacJvmOptions())
+ .addAll(javaToolchain.getJvmOptions())
.add("-Xbootclasspath/p:" + javacJar.getExecPath().getPathString())
.build();
builder.setJarExecutable(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
index 745aaf8..d09339f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
@@ -30,7 +30,6 @@
import com.google.devtools.common.options.EnumConverter;
import com.google.devtools.common.options.Option;
import com.google.devtools.common.options.TriState;
-
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
@@ -366,7 +365,7 @@
JavaOptions host = (JavaOptions) getDefault();
host.javaBase = hostJavaBase;
- host.jvmOpts = ImmutableList.of("-client", "-XX:ErrorFile=/dev/stderr");
+ host.jvmOpts = ImmutableList.of("-XX:ErrorFile=/dev/stderr");
host.javacOpts = javacOpts;
host.javaToolchain = hostJavaToolchain;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainData.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainData.java
index ba6c3dc..7abf6c1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainData.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainData.java
@@ -19,7 +19,6 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-
import java.util.List;
/**
@@ -87,9 +86,10 @@
}
/**
- * @return the list of options to be given to the JVM when invoking the java compiler.
+ * @return the list of options to be given to the JVM when invoking the java compiler and
+ * associated tools.
*/
- public ImmutableList<String> getJavacJvmOptions() {
+ public ImmutableList<String> getJvmOptions() {
return jvmOpts;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
index 7ba9c78..3190fe7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
@@ -24,9 +24,7 @@
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-
import java.util.List;
-
import javax.annotation.Nullable;
/**
@@ -46,7 +44,7 @@
private final NestedSet<Artifact> extclasspath;
private final String encoding;
private final ImmutableList<String> javacOptions;
- private final ImmutableList<String> javacJvmOptions;
+ private final ImmutableList<String> jvmOptions;
private final boolean javacSupportsWorkers;
private final Artifact javac;
private final Artifact javaBuilder;
@@ -89,7 +87,7 @@
.addAll(data.getJavacOptions())
.addAll(defaultJavacFlags)
.build();
- this.javacJvmOptions = data.getJavacJvmOptions();
+ this.jvmOptions = data.getJvmOptions();
this.javacSupportsWorkers = data.getJavacSupportsWorkers();
}
@@ -98,9 +96,11 @@
return javacOptions;
}
- /** @return the list of default options for the JVM running the java compiler */
- public ImmutableList<String> getJavacJvmOptions() {
- return javacJvmOptions;
+ /**
+ * @return the list of default options for the JVM running the java compiler and associated tools.
+ */
+ public ImmutableList<String> getJvmOptions() {
+ return jvmOptions;
}
/** @return whether JavaBuilders supports running as a persistent worker or not */
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java
index c50fe4c..10de249 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java
@@ -29,7 +29,6 @@
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleClass.Builder;
import com.google.devtools.build.lib.util.FileTypeSet;
-
import java.util.List;
/**
@@ -84,7 +83,7 @@
The list of arguments for the JVM when invoking the Java compiler. Please refer to the Java
virtual machine documentation for the extensive list of possible flags for this option.
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
- .add(attr("jvm_opts", STRING_LIST).value(ImmutableList.<String>of("-client")))
+ .add(attr("jvm_opts", STRING_LIST).value(ImmutableList.<String>of()))
/* <!-- #BLAZE_RULE(java_toolchain).ATTRIBUTE(javac_supports_workers) -->
True if JavaBuilder supports running as a persistent worker, false if it doesn't.
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java
index 00b2477..69544f3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java
@@ -24,7 +24,6 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.vfs.PathFragment;
-
import java.util.Collection;
import java.util.Map;
@@ -35,11 +34,6 @@
*/
@Immutable
public final class SingleJarActionBuilder {
- /**
- * Also see DeployArchiveBuilder.SINGLEJAR_MAX_MEMORY. We don't expect that anyone has more
- * than ~500,000 files in a source jar, so 256 MB of memory should be plenty.
- */
- private static final String SINGLEJAR_MAX_MEMORY = "-Xmx256m";
private static final ImmutableList<String> SOURCE_JAR_COMMAND_LINE_ARGS = ImmutableList.of(
"--compression",
@@ -61,20 +55,21 @@
ruleContext.getHostConfiguration().getFragment(Jvm.class).getJavaExecutable();
NestedSet<Artifact> hostJavabaseInputs = JavaHelper.getHostJavabaseInputs(ruleContext);
Artifact singleJar = getSingleJar(ruleContext);
- ruleContext.registerAction(new SpawnAction.Builder()
- .addOutput(outputJar)
- .addInputs(resources.values())
- .addInputs(resourceJars)
- .addTransitiveInputs(hostJavabaseInputs)
- .setJarExecutable(
- javaPath,
- singleJar,
- ImmutableList.of("-client", SINGLEJAR_MAX_MEMORY))
- .setCommandLine(sourceJarCommandLine(outputJar, resources, resourceJars))
- .useParameterFile(ParameterFileType.SHELL_QUOTED)
- .setProgressMessage("Building source jar " + outputJar.prettyPrint())
- .setMnemonic("JavaSourceJar")
- .build(ruleContext));
+ ruleContext.registerAction(
+ new SpawnAction.Builder()
+ .addOutput(outputJar)
+ .addInputs(resources.values())
+ .addInputs(resourceJars)
+ .addTransitiveInputs(hostJavabaseInputs)
+ .setJarExecutable(
+ javaPath,
+ singleJar,
+ JavaToolchainProvider.fromRuleContext(ruleContext).getJvmOptions())
+ .setCommandLine(sourceJarCommandLine(outputJar, resources, resourceJars))
+ .useParameterFile(ParameterFileType.SHELL_QUOTED)
+ .setProgressMessage("Building source jar " + outputJar.prettyPrint())
+ .setMnemonic("JavaSourceJar")
+ .build(ruleContext));
}
/** Returns the SingleJar deploy jar Artifact. */
diff --git a/tools/jdk/BUILD b/tools/jdk/BUILD
index 96581b0..a62f067 100644
--- a/tools/jdk/BUILD
+++ b/tools/jdk/BUILD
@@ -124,7 +124,10 @@
ijar = ["@bazel_tools//tools/jdk:ijar"],
javabuilder = ["//tools/jdk:JavaBuilder_deploy.jar"],
javac = ["//third_party/java/jdk/langtools:javac_jar"],
- jvm_opts = ["-client"],
+ jvm_opts = [
+ "-XX:+TieredCompilation",
+ "-XX:TieredStopAtLevel=1",
+ ],
singlejar = ["//tools/jdk:SingleJar_deploy.jar"],
source_version = "8",
target_version = "8",