aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/vfs
diff options
context:
space:
mode:
authorGravatar Eric Fellheimer <felly@google.com>2015-10-26 20:18:08 +0000
committerGravatar Florian Weikert <fwe@google.com>2015-10-27 11:49:30 +0000
commit6870e91fb40cc015c2af8ec136e991e7203d8fde (patch)
tree966046595bc18a65d0dbe66e3d3dbb09b749fd52 /src/main/java/com/google/devtools/build/lib/vfs
parentfea68a325b2a57b72fa6997d729275c5840e16a6 (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.java15
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;
}