aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar Eric Fellheimer <felly@google.com>2016-08-10 21:36:02 +0000
committerGravatar Yue Gan <yueg@google.com>2016-08-11 09:16:01 +0000
commitcfd61cf9b12089804118a45eabbf329880ea4641 (patch)
tree7e2676ce25fb27a524d20a755881ab03bc187aa5 /src/main
parente41857b2e3bd279e3b00a7137b750afd0bc16868 (diff)
Properly size compact hash map in order to mitigate GC churn.
-- MOS_MIGRATED_REVID=129912633
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
index 586c493485..40d8a89810 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
@@ -87,7 +87,6 @@ import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
import com.google.devtools.build.skyframe.WalkableGraph;
import com.google.devtools.build.skyframe.WalkableGraph.WalkableGraphFactory;
-
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collection;
@@ -106,7 +105,6 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Logger;
-
import javax.annotation.Nullable;
/**
@@ -427,7 +425,8 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target>
private Collection<Target> processRawReverseDeps(Map<Target, Collection<Target>> rawReverseDeps) {
Set<Target> result = CompactHashSet.create();
- CompactHashSet<Target> visited = CompactHashSet.create();
+ CompactHashSet<Target> visited =
+ CompactHashSet.createWithExpectedSize(totalSizeOfCollections(rawReverseDeps.values()));
Set<Label> keys = CompactHashSet.create(Collections2.transform(rawReverseDeps.keySet(),
TARGET_LABEL_FUNCTION));
@@ -449,6 +448,14 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target>
return result;
}
+ private static <T> int totalSizeOfCollections(Iterable<Collection<T>> nestedCollections) {
+ int totalSize = 0;
+ for (Collection<T> collection : nestedCollections) {
+ totalSize += collection.size();
+ }
+ return totalSize;
+ }
+
@Override
public Set<Target> getTransitiveClosure(Set<Target> targets) {
Set<Target> visited = new HashSet<>();