Improve memory overhead of calculating all computed default values
Instead of copying the accumulator map each call, reuse the same map,
overwriting previous values and taking snapshots in the base case.
--
MOS_MIGRATED_REVID=135394631
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
index d8939e7..aa28051 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
@@ -1166,7 +1166,7 @@
List<Map<String, Object>> depMaps = mapper.visitAttributes(dependencies, limiter);
// For each combination, call compute() on a specialized AttributeMap providing those
// values.
- Map<List<Object>, T> valueMap = new HashMap<>();
+ Map<List<Object>, T> valueMap = new HashMap<>(depMaps.size());
for (Map<String, Object> depMap : depMaps) {
AttributeMap attrMap = mapper.createMapBackedAttributeMap(depMap);
Object value = compute(attrMap);
@@ -2077,7 +2077,7 @@
*/
public <TYPE> Attribute.Builder<TYPE> cloneBuilder(Type<TYPE> tp) {
Preconditions.checkArgument(tp == this.type);
- Builder<TYPE> builder = new Builder<TYPE>(name, tp);
+ Builder<TYPE> builder = new Builder<>(name, tp);
builder.allowedFileTypesForLabels = allowedFileTypesForLabels;
builder.allowedRuleClassesForLabels = allowedRuleClassesForLabels;
builder.allowedRuleClassesForLabelsWarning = allowedRuleClassesForLabelsWarning;