Properly size compact hash map in order to mitigate GC churn.

--
MOS_MIGRATED_REVID=129912633
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 586c493..40d8a89 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.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.Executors;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.logging.Logger;
-
 import javax.annotation.Nullable;
 
 /**
@@ -427,7 +425,8 @@
 
   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 @@
     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<>();