diff options
author | 2015-10-26 20:18:08 +0000 | |
---|---|---|
committer | 2015-10-27 11:49:30 +0000 | |
commit | 6870e91fb40cc015c2af8ec136e991e7203d8fde (patch) | |
tree | 966046595bc18a65d0dbe66e3d3dbb09b749fd52 /src/main/java/com/google/devtools/build/lib/vfs | |
parent | fea68a325b2a57b72fa6997d729275c5840e16a6 (diff) |
Reduce memory churn while creating PathFragments.
--
MOS_MIGRATED_REVID=106329484
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/vfs')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java b/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java index a39486a10d..434cdcfc2c 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java @@ -185,8 +185,7 @@ public final class PathFragment implements Comparable<PathFragment>, Serializabl * @param offset how many characters from the start of the string to ignore. */ private static String[] segment(String toSegment, int offset) { - char[] chars = toSegment.toCharArray(); - int length = chars.length; + int length = toSegment.length(); // Handle "/" and "" quickly. if (length == offset) { @@ -198,7 +197,7 @@ public final class PathFragment implements Comparable<PathFragment>, Serializabl int seg = 0; int start = offset; for (int i = offset; i < length; i++) { - if (isSeparator(chars[i])) { + if (isSeparator(toSegment.charAt(i))) { if (i > start) { // to skip repeated separators seg++; } @@ -212,20 +211,16 @@ public final class PathFragment implements Comparable<PathFragment>, Serializabl seg = 0; start = offset; for (int i = offset; i < length; i++) { - if (isSeparator(chars[i])) { + if (isSeparator(toSegment.charAt(i))) { if (i > start) { // to skip repeated separators - // Make a copy of the String here to allow the interning to save memory. String.substring - // does not make a copy, but refers to the original char array, preventing garbage - // collection of the parts that are unnecessary. - result[seg] = StringCanonicalizer.intern(new String(chars, start, i - start)); + result[seg] = StringCanonicalizer.intern(toSegment.substring(start, i)); seg++; } start = i + 1; } } if (start < length) { - result[seg] = StringCanonicalizer.intern(new String(chars, start, length - start)); - seg++; + result[seg] = StringCanonicalizer.intern(toSegment.substring(start, length)); } return result; } |