Browse Source

Replace usage of ArrayIndexOutOfBoundsException in treewalk

Using exceptions during normal operations - for example with the
desire of expanding an array in the failure case - can have a
severe performance impact. When exceptions are instantiated,
a stack trace is collected. Generating stack trace can be expensive.

Compared to that, checking an array for length - even if done many
times - is cheap since this is a check that can run in just a
handful of CPU cycles.

Change-Id: Ifaf10623f6a876c9faecfa44654c9296315adfcb
Signed-off-by: Patrick Hiesel <hiesel@google.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
tags/v5.1.13.202002110435-r
Patrick Hiesel 4 years ago
parent
commit
6185db3d77

+ 2
- 4
org.eclipse.jgit/src/org/eclipse/jgit/treewalk/AbstractTreeIterator.java View File

@@ -239,12 +239,10 @@ public abstract class AbstractTreeIterator {
path = p.path;
pathOffset = p.pathLen + 1;

try {
path[pathOffset - 1] = '/';
} catch (ArrayIndexOutOfBoundsException e) {
if (pathOffset > path.length) {
growPath(p.pathLen);
path[pathOffset - 1] = '/';
}
path[pathOffset - 1] = '/';
}

/**

+ 4
- 5
org.eclipse.jgit/src/org/eclipse/jgit/treewalk/CanonicalTreeParser.java View File

@@ -387,14 +387,13 @@ public class CanonicalTreeParser extends AbstractTreeIterator {
tmp = pathOffset;
for (;; tmp++) {
c = raw[ptr++];
if (c == 0)
if (c == 0) {
break;
try {
path[tmp] = c;
} catch (ArrayIndexOutOfBoundsException e) {
}
if (tmp >= path.length) {
growPath(tmp);
path[tmp] = c;
}
path[tmp] = c;
}
pathLen = tmp;
nextPtr = ptr + OBJECT_ID_LENGTH;

Loading…
Cancel
Save