Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CommitsTracker.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CommitsTracker.java (date 1540904337000) +++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CommitsTracker.java (date 1541579984000) @@ -23,6 +23,7 @@ import static com.google.common.collect.Queues.newConcurrentLinkedQueue; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; import java.util.Queue; import java.util.concurrent.ConcurrentHashMap; @@ -83,7 +84,17 @@ public void trackExecutedCommitOf(Thread thread) { long t = System.currentTimeMillis(); - commits.removeIf(c -> c.timeStamp < t - 60000); + final Iterator it = commits.iterator(); + + // Purge the queue + // Avoiding removeIf allows us to bail out early. See OAK-7885 + while (it.hasNext()) { + if (it.next().timeStamp < t - 60000) { + it.remove(); + } else { + break; + } + } commits.offer(new Commit(t, thread.getName())); }