diff options
author | Piotr Jastrzebski <haaawk@google.com> | 2015-03-02 07:54:06 +0000 |
---|---|---|
committer | Piotr Jastrzebski <haaawk@google.com> | 2015-03-02 08:05:09 +0000 |
commit | 676a597064e316cefc6423c29ac23c85e5d22c7e (patch) | |
tree | d91d7f6de0d681b22490f822763fc509f54449a1 /dx | |
parent | d119d88adf7741f47a6a38b682dcd45e39adbd04 (diff) | |
download | toolchain_jack-676a597064e316cefc6423c29ac23c85e5d22c7e.zip toolchain_jack-676a597064e316cefc6423c29ac23c85e5d22c7e.tar.gz toolchain_jack-676a597064e316cefc6423c29ac23c85e5d22c7e.tar.bz2 |
Avoid unnecessary creation of StringIdItem objects
Profiler showed for Music app that StringIdsSection.intern(CstString)
was called 430594 times and only 52903 times strings.get(value) in
StringIdsSection.intern(StringIdItem) returned null. This means that
377691 instances of StringIdItem were created unnecessarily.
StringIdsSection.intern(CstString) created them to be able to use
StringIdsSection.intern(StringIdItem) but inside this method CstString
is obtained from StringIdItem and StringIdItem is useless unless
strings.get(value) returns null.
Change-Id: I08978b0a28fe7bd13805e44f9d52a4bbf137fd0b
Diffstat (limited to 'dx')
-rw-r--r-- | dx/src/com/android/jack/dx/dex/file/StringIdsSection.java | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/dx/src/com/android/jack/dx/dex/file/StringIdsSection.java b/dx/src/com/android/jack/dx/dex/file/StringIdsSection.java index b9d6c0d..53e5241 100644 --- a/dx/src/com/android/jack/dx/dex/file/StringIdsSection.java +++ b/dx/src/com/android/jack/dx/dex/file/StringIdsSection.java @@ -108,7 +108,21 @@ public final class StringIdsSection extends UniformItemSection { * @return {@code non-null;} the interned string */ public StringIdItem intern(CstString string) { - return intern(new StringIdItem(string)); + if (string == null) { + throw new NullPointerException("string == null"); + } + + throwIfPrepared(); + + StringIdItem already = strings.get(string); + + if (already != null) { + return already; + } + + StringIdItem result = new StringIdItem(string); + strings.put(string, result); + return result; } /** |