]> source.dussan.org Git - jgit.git/commitdiff
TemporaryBuffer: Clear block pointer list instead of reallocating 27/44127/3
authorDave Borowitz <dborowitz@google.com>
Wed, 18 Mar 2015 19:51:40 +0000 (12:51 -0700)
committerDave Borowitz <dborowitz@google.com>
Wed, 18 Mar 2015 20:38:58 +0000 (13:38 -0700)
The block pointer list may have been relatively large, so no need to
make more garbage. Instead, just clear the list and null out all the
elements.

Another possible motivation: a caller may have provided an inaccurate
estimated size, so the list might have been resized several times. If
the list is reused later for a similarly underestimated workload, this
fix will prevent additional resizing on subsequent usages.

Change-Id: I511675035dcff1117381a46c294cc11aded10893

org.eclipse.jgit/src/org/eclipse/jgit/util/TemporaryBuffer.java

index 0a8c5945d9959b074010326275e594d8c3820863..006c3c0a0102d0a634851ff3c751f5f50a5c5229 100644 (file)
@@ -291,13 +291,11 @@ public abstract class TemporaryBuffer extends OutputStream {
                if (overflow != null) {
                        destroy();
                }
-               if (inCoreLimit < Block.SZ) {
-                       blocks = new ArrayList<Block>(1);
-                       blocks.add(new Block(inCoreLimit));
-               } else {
+               if (blocks != null)
+                       blocks.clear();
+               else
                        blocks = new ArrayList<Block>(initialBlocks);
-                       blocks.add(new Block());
-               }
+               blocks.add(new Block(Math.min(inCoreLimit, Block.SZ)));
        }
 
        /**