aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/java
diff options
context:
space:
mode:
authorGravatar Philipp Wollermann <philwo@google.com>2016-07-15 14:01:37 +0000
committerGravatar Yun Peng <pcloudy@google.com>2016-07-18 10:42:10 +0000
commit74cb8c7d6ae2462006e983b8baafd50c884d1d8d (patch)
tree0cb370f17072bbecf0f577834b0fbfb3d35ea84f /src/main/java/com/google/devtools/build/lib/rules/java
parent42d8290f21d5ae836ac2aa65166aa84afda8b872 (diff)
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
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java56
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileActionBuilder.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainData.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java35
7 files changed, 56 insertions, 63 deletions
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 21b94c9883..97a05f26e3 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.rules.test.InstrumentedFilesCollector;
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 @@ import javax.annotation.Nullable;
*/
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 @@ public final class JavaCompilationHelper extends BaseJavaCompilationHelper {
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 final class JavaCompilationHelper extends BaseJavaCompilationHelper {
*/
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 @@ public final class JavaCompilationHelper extends BaseJavaCompilationHelper {
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 0d0a53f4c3..8fb7823861 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 @@ public class JavaHeaderCompileActionBuilder {
":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 745aaf8dc3..d09339f056 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.Converters.StringSetConverter;
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 @@ public class JavaOptions extends FragmentOptions {
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 ba6c3dc725..7abf6c1504 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.base.Joiner;
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 @@ public class JavaToolchainData {
}
/**
- * @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 7ba9c78f73..3190fe7e5b 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.RuleContext;
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 @@ public final class JavaToolchainProvider implements TransitiveInfoProvider {
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 @@ public final class JavaToolchainProvider implements TransitiveInfoProvider {
.addAll(data.getJavacOptions())
.addAll(defaultJavacFlags)
.build();
- this.javacJvmOptions = data.getJavacJvmOptions();
+ this.jvmOptions = data.getJvmOptions();
this.javacSupportsWorkers = data.getJavacSupportsWorkers();
}
@@ -98,9 +96,11 @@ public final class JavaToolchainProvider implements TransitiveInfoProvider {
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 c50fe4c07f..10de249433 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.analysis.RuleDefinitionEnvironment;
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 @@ public final class JavaToolchainRule implements RuleDefinition {
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 00b24779a5..69544f3931 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.analysis.actions.SpawnAction;
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 @@ import java.util.Map;
*/
@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 @@ public final class SingleJarActionBuilder {
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. */