Skip to content

Commit

Permalink
Memory optimizations (gradle#31941)
Browse files Browse the repository at this point in the history
  • Loading branch information
jvandort authored Jan 15, 2025
2 parents 80bf2a8 + 0a84ddd commit 636df91
Show file tree
Hide file tree
Showing 43 changed files with 422 additions and 263 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,23 @@
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableSortedSet;
import com.google.common.collect.Lists;
import com.google.common.util.concurrent.UncheckedExecutionException;
import org.gradle.internal.UncheckedException;
import org.gradle.model.internal.manage.binding.StructBindingsStore;
import org.gradle.model.internal.manage.schema.ModelSchema;
import org.gradle.model.internal.manage.schema.ModelSchemaStore;
import org.gradle.model.internal.manage.schema.extract.*;
import org.gradle.model.internal.manage.schema.extract.ManagedImplStructNodeInitializerExtractionStrategy;
import org.gradle.model.internal.manage.schema.extract.ModelMapNodeInitializerExtractionStrategy;
import org.gradle.model.internal.manage.schema.extract.ModelSetNodeInitializerExtractionStrategy;
import org.gradle.model.internal.manage.schema.extract.NodeInitializerExtractionStrategy;
import org.gradle.model.internal.manage.schema.extract.ScalarCollectionNodeInitializerExtractionStrategy;
import org.gradle.model.internal.manage.schema.extract.ScalarTypes;
import org.gradle.model.internal.manage.schema.extract.SpecializedMapNodeInitializerExtractionStrategy;
import org.gradle.model.internal.type.ModelType;
import org.gradle.model.internal.type.ModelTypes;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ExecutionException;

Expand All @@ -52,13 +58,13 @@ public NodeInitializer load(NodeInitializerContext<?> context) throws Exception

public DefaultNodeInitializerRegistry(ModelSchemaStore schemaStore, StructBindingsStore structBindingsStore) {
this.schemaStore = schemaStore;
this.allStrategies = Lists.newArrayList(
this.allStrategies = new ArrayList<>(Arrays.asList(
new ModelSetNodeInitializerExtractionStrategy(),
new SpecializedMapNodeInitializerExtractionStrategy(),
new ModelMapNodeInitializerExtractionStrategy(),
new ScalarCollectionNodeInitializerExtractionStrategy(),
new ManagedImplStructNodeInitializerExtractionStrategy(structBindingsStore)
);
));
additionalStrategies = new ArrayList<>();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@

package org.gradle.workers.internal;

import com.google.common.collect.Lists;
import org.gradle.api.internal.project.IsolatedAntBuilder;
import org.gradle.internal.Cast;
import org.gradle.internal.Factory;
Expand All @@ -28,6 +27,7 @@
import org.gradle.workers.WorkParameters;

import javax.annotation.Nullable;
import java.util.Collections;

import static org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader;

Expand All @@ -41,7 +41,7 @@ public AbstractClassLoaderWorker(ServiceRegistry workServices, ActionExecutionSp
workServices,
instantiatorFactory,
new IsolationScheme<>(Cast.uncheckedCast(WorkAction.class), WorkParameters.class, WorkParameters.None.class),
Lists.newArrayList(IsolatedAntBuilder.class));
Collections.singletonList(IsolatedAntBuilder.class));
}

public DefaultWorkResult executeInClassLoader(TransportableActionExecutionSpec spec, ClassLoader workerClassLoader) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package org.gradle.internal.graph;

import com.google.common.collect.ImmutableSet;
import org.gradle.util.internal.GUtil;

import java.util.ArrayDeque;
Expand All @@ -39,7 +40,12 @@ public class CachingDirectedGraphWalker<N, T> {
private final DirectedGraphWithEdgeValues<N, T> graph;
private List<N> startNodes = new ArrayList<N>();
private Set<NodeDetails<N, T>> strongComponents = new LinkedHashSet<NodeDetails<N, T>>();
private final Map<N, Set<T>> cachedNodeValues = new HashMap<N, Set<T>>();

/**
* We use an immutable set for cached node values since the cache can become quite large
* for very large graphs, and immutable sets are much more memory efficient than LinkedHashSets.
*/
private final Map<N, ImmutableSet<T>> cachedNodeValues = new HashMap<N, ImmutableSet<T>>();

public CachingDirectedGraphWalker(DirectedGraph<N, T> graph) {
this.graph = new GraphWithEmptyEdges<N, T>(graph);
Expand Down Expand Up @@ -161,7 +167,7 @@ private Set<T> doSearch() {
} else {
// Not part of a strongly connected component or the root of a strongly connected component
for (NodeDetails<N, T> componentMember : details.componentMembers) {
cachedNodeValues.put(componentMember.node, details.values);
cachedNodeValues.put(componentMember.node, ImmutableSet.copyOf(details.values));
componentMember.finished = true;
components.remove(componentMember.component);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

package org.gradle.internal.logging.console;

import com.google.common.collect.Lists;
import com.google.common.collect.ImmutableList;
import org.gradle.internal.logging.events.StyledTextOutputEvent;
import org.gradle.internal.logging.format.TersePrettyDurationFormatter;
import org.gradle.internal.logging.text.StyledTextOutput;
Expand Down Expand Up @@ -107,7 +107,7 @@ public List<StyledTextOutputEvent.Span> formatProgress(boolean timerEnabled, lon
+ (timerEnabled ? " [" + elapsedTimeStr + "]" : ""));

lastElapsedTimeStr = elapsedTimeStr;
formatted = Lists.newArrayList(
formatted = ImmutableList.of(
new StyledTextOutputEvent.Span(StyledTextOutput.Style.Header, statusPrefix),
new StyledTextOutputEvent.Span(failing ? StyledTextOutput.Style.FailureHeader : StyledTextOutput.Style.SuccessHeader, coloredProgress),
new StyledTextOutputEvent.Span(StyledTextOutput.Style.Header, statusSuffix));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@

package org.gradle.internal.logging.events;

import com.google.common.collect.Lists;
import com.google.common.collect.ImmutableList;
import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.StringUtils;

import java.util.List;
import java.util.Locale;

public class BooleanQuestionPromptEvent extends PromptOutputEvent {
private static final List<String> LENIENT_YES_NO_CHOICES = Lists.newArrayList("yes", "no", "y", "n");
private static final List<String> LENIENT_YES_NO_CHOICES = ImmutableList.of("yes", "no", "y", "n");
private final String question;
private final boolean defaultValue;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@

package org.gradle.internal.logging.events;

import com.google.common.collect.Lists;
import com.google.common.collect.ImmutableList;
import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.StringUtils;

import java.util.List;

public class YesNoQuestionPromptEvent extends PromptOutputEvent {
public static final List<String> YES_NO_CHOICES = Lists.newArrayList("yes", "no");
public static final List<String> YES_NO_CHOICES = ImmutableList.of("yes", "no");
private final String question;

public YesNoQuestionPromptEvent(long timestamp, String question) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@

package org.gradle.ide.visualstudio.internal;

import com.google.common.collect.Lists;
import org.gradle.api.file.FileCollection;
import org.gradle.api.file.ProjectLayout;
import org.gradle.language.cpp.CppBinary;
Expand All @@ -34,6 +33,7 @@
import org.gradle.util.internal.VersionNumber;

import java.io.File;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
Expand Down Expand Up @@ -128,7 +128,7 @@ public VersionNumber getSdkVersion() {

@Override
public List<String> getVariantDimensions() {
return Lists.newArrayList(getBinary().getName());
return Collections.singletonList(getBinary().getName());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@

package org.gradle.ide.visualstudio.internal;

import com.google.common.collect.Lists;
import org.apache.commons.lang.StringUtils;
import org.gradle.api.DomainObjectSet;
import org.gradle.api.Transformer;
Expand All @@ -43,6 +42,7 @@

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
Expand Down Expand Up @@ -160,7 +160,7 @@ public ProjectType getProjectType() {
public List<String> getVariantDimensions() {
List<String> dimensions = binary.getNamingScheme().getVariantDimensions();
if (dimensions.isEmpty()) {
return Lists.newArrayList(binary.getBuildType().getName());
return Collections.singletonList(binary.getBuildType().getName());
} else {
return dimensions;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import org.gradle.api.Action;
Expand Down Expand Up @@ -368,7 +369,7 @@ public void execute(ScalaBasePlugin scalaBasePlugin) {

// exclude the dependencies already provided by SCALA_CONTAINER; prevents problems with Eclipse Scala plugin
project.getGradle().projectsEvaluated(gradle -> {
final List<String> provided = Lists.newArrayList("scala-library", "scala-swing", "scala-dbc");
Set<String> provided = ImmutableSet.of("scala-library", "scala-swing", "scala-dbc");
Predicate<Dependency> dependencyInProvided = dependency -> provided.contains(dependency.getName());
List<Dependency> dependencies = Lists.newArrayList(Iterables.filter(Iterables.concat(Iterables.transform(model.getClasspath().getPlusConfigurations(), new Function<Configuration, Iterable<Dependency>>() {
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
*/
package org.gradle.plugins.ide.eclipse;

import com.google.common.collect.Lists;
import org.gradle.api.Action;
import org.gradle.api.JavaVersion;
import org.gradle.api.Project;
Expand Down Expand Up @@ -46,6 +45,7 @@

import javax.inject.Inject;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
Expand Down Expand Up @@ -204,7 +204,9 @@ public List<WbResource> call() throws Exception {
File projectDir = project.getProjectDir();
File webAppDir = ((War) project.getTasks().getByName("war")).getWebAppDirectory().get().getAsFile();
String webAppDirName = RelativePathUtil.relativePath(projectDir, webAppDir);
return Lists.newArrayList(new WbResource("/", webAppDirName));
List<WbResource> result = new ArrayList<>(1);
result.add(new WbResource("/", webAppDirName));
return result;
}
});
convention.map("sourceDirs", new Callable<Set<File>>() {
Expand Down Expand Up @@ -284,11 +286,11 @@ public void execute(JavaPlugin javaPlugin) {
((IConventionAware) eclipseModel.getWtp().getFacet()).getConventionMapping().map("facets", new Callable<List<Facet>>() {
@Override
public List<Facet> call() throws Exception {
return Lists.newArrayList(
new Facet(Facet.FacetType.fixed, "jst.java", null),
new Facet(Facet.FacetType.installed, "jst.utility", "1.0"),
new Facet(Facet.FacetType.installed, "jst.java", toJavaFacetVersion(project.getExtensions().getByType(JavaPluginExtension.class).getSourceCompatibility()))
);
List<Facet> result = new ArrayList<>(3);
result.add(new Facet(Facet.FacetType.fixed, "jst.java", null));
result.add(new Facet(Facet.FacetType.installed, "jst.utility", "1.0"));
result.add(new Facet(Facet.FacetType.installed, "jst.java", toJavaFacetVersion(project.getExtensions().getByType(JavaPluginExtension.class).getSourceCompatibility())));
return result;
}
});
}
Expand All @@ -300,12 +302,12 @@ public void execute(WarPlugin warPlugin) {
((IConventionAware) eclipseModel.getWtp().getFacet()).getConventionMapping().map("facets", new Callable<List<Facet>>() {
@Override
public List<Facet> call() throws Exception {
return Lists.newArrayList(
new Facet(Facet.FacetType.fixed, "jst.java", null),
new Facet(Facet.FacetType.fixed, "jst.web", null),
new Facet(Facet.FacetType.installed, "jst.web", "2.4"),
new Facet(Facet.FacetType.installed, "jst.java", toJavaFacetVersion(project.getExtensions().getByType(JavaPluginExtension.class).getSourceCompatibility()))
);
List<Facet> result = new ArrayList<>(4);
result.add(new Facet(Facet.FacetType.fixed, "jst.java", null));
result.add(new Facet(Facet.FacetType.fixed, "jst.web", null));
result.add(new Facet(Facet.FacetType.installed, "jst.web", "2.4"));
result.add(new Facet(Facet.FacetType.installed, "jst.java", toJavaFacetVersion(project.getExtensions().getByType(JavaPluginExtension.class).getSourceCompatibility())));
return result;
}
});
}
Expand All @@ -317,10 +319,10 @@ public void execute(EarPlugin earPlugin) {
((IConventionAware) eclipseModel.getWtp().getFacet()).getConventionMapping().map("facets", new Callable<List<Facet>>() {
@Override
public List<Facet> call() throws Exception {
return Lists.newArrayList(
new Facet(Facet.FacetType.fixed, "jst.ear", null),
new Facet(Facet.FacetType.installed, "jst.ear", "5.0")
);
List<Facet> result = new ArrayList<>(2);
result.add(new Facet(Facet.FacetType.fixed, "jst.ear", null));
result.add(new Facet(Facet.FacetType.installed, "jst.ear", "5.0"));
return result;
}
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@

package org.gradle.jvm.toolchain.internal;

import com.google.common.collect.Lists;
import net.rubygrapefruit.platform.MissingRegistryEntryException;
import net.rubygrapefruit.platform.WindowsRegistry;
import org.gradle.internal.nativeintegration.NativeIntegrationUnavailableException;
Expand Down Expand Up @@ -54,13 +53,13 @@ public Set<InstallationLocation> get() {

private Set<InstallationLocation> findInstallationsInRegistry() {
final Stream<String> openJdkInstallations = findOpenJDKs();
final Stream<String> jvms = Lists.newArrayList(
final Stream<String> jvms = Stream.of(
"SOFTWARE\\JavaSoft\\JDK",
"SOFTWARE\\JavaSoft\\Java Development Kit",
"SOFTWARE\\JavaSoft\\Java Runtime Environment",
"SOFTWARE\\Wow6432Node\\JavaSoft\\Java Development Kit",
"SOFTWARE\\Wow6432Node\\JavaSoft\\Java Runtime Environment"
).stream().map(this::findJvms).flatMap(List::stream);
).map(this::findJvms).flatMap(List::stream);
return Stream.concat(openJdkInstallations, jvms)
.map(javaHome -> InstallationLocation.autoDetected(new File(javaHome), getSourceName()))
.collect(Collectors.toSet());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

package org.gradle.api.plugins;

import com.google.common.collect.Lists;
import com.google.common.collect.ImmutableList;
import org.gradle.api.JavaVersion;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
Expand All @@ -28,10 +28,10 @@
import org.gradle.api.internal.ConventionMapping;
import org.gradle.api.internal.GeneratedSubclasses;
import org.gradle.api.internal.IConventionAware;
import org.gradle.api.internal.artifacts.configurations.RoleBasedConfigurationCreationRequest;
import org.gradle.api.internal.artifacts.configurations.ConfigurationRole;
import org.gradle.api.internal.artifacts.configurations.ConfigurationRoles;
import org.gradle.api.internal.artifacts.configurations.RoleBasedConfigurationContainerInternal;
import org.gradle.api.internal.artifacts.configurations.RoleBasedConfigurationCreationRequest;
import org.gradle.api.internal.artifacts.configurations.UsageDescriber;
import org.gradle.api.internal.file.FileTreeInternal;
import org.gradle.api.internal.plugins.DslObject;
Expand Down Expand Up @@ -497,9 +497,10 @@ private String getUsageExpectationMessage() {

@Override
public void failOnInabilityToMutateUsage() {
List<String> resolutions = Lists.newArrayList(
List<String> resolutions = ImmutableList.of(
RoleBasedConfigurationCreationRequest.getDefaultReservedNameAdvice(getConfigurationName()),
getUsageMutationAdvice());
getUsageMutationAdvice()
);
throw new UnmodifiableUsageException(getConfigurationName(), resolutions);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,23 @@

package org.gradle.nativeplatform.internal.modulemap;

import com.google.common.collect.Lists;
import com.google.common.io.Files;
import org.apache.commons.io.FileUtils;
import org.gradle.api.UncheckedIOException;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import static org.gradle.util.internal.CollectionUtils.collect;
import static org.gradle.util.internal.CollectionUtils.filter;

public class GenerateModuleMapFile {
public static void generateFile(File moduleMapFile, String moduleName, List<String> publicHeaderDirs) {
List<String> lines = Lists.newArrayList(
"module " + moduleName + " {"
);
String firstLine = "module " + moduleName + " {";
List<String> lines = new ArrayList<>();
lines.add(firstLine);
List<String> validHeaderDirs = filter(publicHeaderDirs, path -> new File(path).exists());
lines.addAll(collect(validHeaderDirs, path -> "\tumbrella \"" + path + "\""));
lines.add("\texport *");
Expand Down
Loading

0 comments on commit 636df91

Please sign in to comment.