diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/HitBooleanTable.java b/src/main/java/com/googlesource/gerrit/plugins/task/HitBooleanTable.java
index 91d7ad4..8d9b9ec 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/task/HitBooleanTable.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/task/HitBooleanTable.java
@@ -28,7 +28,7 @@
     public int numberOfRows;
     public int numberOfColumns;
     public Long sumNanosecondsLoading;
-    public TopKeyMap<V> topNanosecondsLoadingKeys = new TopKeyMap<>();
+    public TopKeyMap<V> topNanosecondsLoadingKeys;
   }
 
   protected Statistics<TopKeyMap.TableKeyValue<R, C>> statistics;
@@ -67,14 +67,15 @@
   }
 
   @Override
-  public void initStatistics() {
+  public void initStatistics(int summaryCount) {
     statistics = new Statistics<>();
+    statistics.topNanosecondsLoadingKeys = new TopKeyMap<>(summaryCount);
   }
 
   @Override
-  public void ensureStatistics() {
+  public void ensureStatistics(int summaryCount) {
     if (statistics == null) {
-      initStatistics();
+      initStatistics(summaryCount);
     }
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/HitHashMap.java b/src/main/java/com/googlesource/gerrit/plugins/task/HitHashMap.java
index 433b091..6ea5a13 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/task/HitHashMap.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/task/HitHashMap.java
@@ -27,7 +27,7 @@
     public long hits;
     public int size;
     public Long sumNanosecondsLoading;
-    public TopKeyMap<K> topNanosecondsLoadingKeys = new TopKeyMap<>();
+    public TopKeyMap<K> topNanosecondsLoadingKeys;
     public List<Object> elements;
   }
 
@@ -37,12 +37,6 @@
 
   public HitHashMap() {}
 
-  public HitHashMap(boolean initStatistics) {
-    if (initStatistics) {
-      initStatistics();
-    }
-  }
-
   @Override
   public V get(Object key) {
     V v = super.get(key);
@@ -93,7 +87,7 @@
   @Override
   public V put(K key, V value) {
     if (statistics != null && value instanceof TracksStatistics) {
-      ((TracksStatistics) value).ensureStatistics();
+      ((TracksStatistics) value).ensureStatistics(statistics.topNanosecondsLoadingKeys.size());
     }
     return super.put(key, value);
   }
@@ -144,14 +138,15 @@
   }
 
   @Override
-  public void initStatistics() {
+  public void initStatistics(int summaryCount) {
     statistics = new Statistics<>();
+    statistics.topNanosecondsLoadingKeys = new TopKeyMap<>(summaryCount);
   }
 
   @Override
-  public void ensureStatistics() {
+  public void ensureStatistics(int summaryCount) {
     if (statistics == null) {
-      initStatistics();
+      initStatistics(summaryCount);
     }
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/HitHashMapOfCollection.java b/src/main/java/com/googlesource/gerrit/plugins/task/HitHashMapOfCollection.java
index 82d04fc..67b2dde 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/task/HitHashMapOfCollection.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/task/HitHashMapOfCollection.java
@@ -33,15 +33,9 @@
 
   public HitHashMapOfCollection() {}
 
-  public HitHashMapOfCollection(boolean initStatistics) {
-    if (initStatistics) {
-      initStatistics();
-    }
-  }
-
   @Override
-  public void initStatistics() {
-    super.initStatistics();
+  public void initStatistics(int summaryCount) {
+    super.initStatistics(summaryCount);
     statistics = new Statistics<>();
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/MatchCache.java b/src/main/java/com/googlesource/gerrit/plugins/task/MatchCache.java
index df0b921..08fa5ce 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/task/MatchCache.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/task/MatchCache.java
@@ -55,8 +55,8 @@
     return isMatched;
   }
 
-  public void initStatistics() {
-    resultByChangeByQuery.initStatistics();
+  public void initStatistics(int summaryCount) {
+    resultByChangeByQuery.initStatistics(summaryCount);
   }
 
   public Object getStatistics() {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/Modules.java b/src/main/java/com/googlesource/gerrit/plugins/task/Modules.java
index 6f8d5cd..4ef065e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/task/Modules.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/task/Modules.java
@@ -64,6 +64,9 @@
     @Option(name = "--include-statistics", usage = "Include statistcs about the task evaluations")
     public boolean includeStatistics = false;
 
+    @Option(name = "--summary-count", usage = "number of items to output in statistics summaries")
+    public int summaryCount = 5;
+
     @Option(
         name = "--preview",
         metaVar = "{CHANGE,PATCHSET}",
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/PredicateCache.java b/src/main/java/com/googlesource/gerrit/plugins/task/PredicateCache.java
index 279729e..4aa6f57 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/task/PredicateCache.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/task/PredicateCache.java
@@ -63,9 +63,9 @@
                 config.getStringList(pluginName, "cacheable-predicates", "byBranch-className")));
   }
 
-  public void initStatistics() {
+  public void initStatistics(int summaryCount) {
     statistics = new Statistics();
-    predicatesByQuery.initStatistics();
+    predicatesByQuery.initStatistics(summaryCount);
   }
 
   public Object getStatistics() {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/Preloader.java b/src/main/java/com/googlesource/gerrit/plugins/task/Preloader.java
index 6721c86..e3a5700 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/task/Preloader.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/task/Preloader.java
@@ -222,9 +222,9 @@
     return extended;
   }
 
-  public void initStatistics() {
+  public void initStatistics(int summaryCount) {
     statistics = new Statistics();
-    optionalTaskByExpression.initStatistics();
+    optionalTaskByExpression.initStatistics(summaryCount);
   }
 
   public Statistics getStatistics() {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/TaskAttributeFactory.java b/src/main/java/com/googlesource/gerrit/plugins/task/TaskAttributeFactory.java
index 414ca25..02840de 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/task/TaskAttributeFactory.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/task/TaskAttributeFactory.java
@@ -347,10 +347,10 @@
   public void initStatistics() {
     if (options.includeStatistics) {
       statistics = new Statistics();
-      definitions.predicateCache.initStatistics();
-      definitions.matchCache.initStatistics();
-      definitions.preloader.initStatistics();
-      definitions.initStatistics();
+      definitions.predicateCache.initStatistics(options.summaryCount);
+      definitions.matchCache.initStatistics(options.summaryCount);
+      definitions.preloader.initStatistics(options.summaryCount);
+      definitions.initStatistics(options.summaryCount);
     }
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/TaskTree.java b/src/main/java/com/googlesource/gerrit/plugins/task/TaskTree.java
index 70cd039..ef860bb 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/task/TaskTree.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/task/TaskTree.java
@@ -73,6 +73,7 @@
     public Object definitionsByBranchBySubSectionCache;
     public Object changesByNamesFactoryQueryCache;
     public Properties.Statistics properties;
+    public transient int summaryCount;
   }
 
   protected static final String TASK_DIR = "task";
@@ -504,12 +505,12 @@
           if (filterable.isPresent()) {
             if (!isChange()) {
               if (nodesByBranch == null) {
-                nodesByBranch = new HitHashMapOfCollection<>(statistics != null);
+                nodesByBranch = initStatistics(new HitHashMapOfCollection<>());
               }
               nodesByBranch.put(branch, filterable.get());
             } else {
               if (definitionsByBranch == null) {
-                definitionsByBranch = new HitHashMap<>(statistics != null);
+                definitionsByBranch = initStatistics(new HitHashMap<>());
                 definitionsByBranchBySubSection.put(subSection, definitionsByBranch);
               }
               definitionsByBranch.put(
@@ -611,11 +612,19 @@
     return changeDataList;
   }
 
-  public void initStatistics() {
+  public void initStatistics(int summaryCount) {
     statistics = new Statistics();
-    definitionsBySubSection.initStatistics();
-    definitionsByBranchBySubSection.initStatistics();
-    changesByNamesFactoryQuery.initStatistics();
+    statistics.summaryCount = summaryCount;
+    definitionsBySubSection.initStatistics(summaryCount);
+    definitionsByBranchBySubSection.initStatistics(summaryCount);
+    changesByNamesFactoryQuery.initStatistics(summaryCount);
+  }
+
+  protected <T extends TracksStatistics> T initStatistics(T tracker) {
+    if (statistics != null) {
+      tracker.initStatistics(statistics.summaryCount);
+    }
+    return tracker;
   }
 
   public Statistics getStatistics() {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/TopKeyMap.java b/src/main/java/com/googlesource/gerrit/plugins/task/TopKeyMap.java
index 5753b52..d4b7987 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/task/TopKeyMap.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/task/TopKeyMap.java
@@ -15,8 +15,8 @@
 package com.googlesource.gerrit.plugins.task;
 
 /**
- * A TopKeyMap is a lightweight limited size (5) map with 'long' keys designed to store only the
- * elements with the top five largest keys.
+ * A TopKeyMap is a lightweight limited size (default 5) map with 'long' keys designed to store only
+ * the elements with the top five largest keys.
  *
  * <p>A TopKeyMap is array based and has O(n) insertion time. Despite not having O(1) insertion
  * times, it should likely be much faster than a hash based map for small n sizes. It also is more
@@ -55,10 +55,15 @@
     }
   }
 
-  @SuppressWarnings("unchecked")
-  protected Entry[] entries = (Entry[]) new Object[5];
+  protected Entry[] entries;
 
   public TopKeyMap() {
+    this(5);
+  }
+
+  @SuppressWarnings("unchecked")
+  public TopKeyMap(int length) {
+    entries = (Entry[]) new Object[length];
     for (int i = 0; i < entries.length; i++) {
       entries[i] = new Entry();
     }
@@ -82,4 +87,8 @@
       }
     }
   }
+
+  public int size() {
+    return entries.length;
+  }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/TracksStatistics.java b/src/main/java/com/googlesource/gerrit/plugins/task/TracksStatistics.java
index d7d0651..12d8722 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/task/TracksStatistics.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/task/TracksStatistics.java
@@ -15,9 +15,9 @@
 package com.googlesource.gerrit.plugins.task;
 
 public interface TracksStatistics {
-  void initStatistics();
+  void initStatistics(int summaryCount);
 
-  void ensureStatistics();
+  void ensureStatistics(int summaryCount);
 
   Object getStatistics();
 }
