Change intern table to unordered set.
Intern table active used bytes goes from 430k to 317k on system
server. Similar %wise savings on other apps.
Bug: 16238192
(cherry picked from commit d910fcef539e12ab181e56ec80684f39c4e95733)
Change-Id: Ic70395124435c6f420a77e6d8639404a160f395a
diff --git a/runtime/mirror/string.cc b/runtime/mirror/string.cc
index e81e431..01599ae 100644
--- a/runtime/mirror/string.cc
+++ b/runtime/mirror/string.cc
@@ -62,19 +62,10 @@
java_lang_String_ = GcRoot<Class>(nullptr);
}
-int32_t String::GetHashCode() {
- int32_t result = GetField32(OFFSET_OF_OBJECT_MEMBER(String, hash_code_));
- if (UNLIKELY(result == 0)) {
- ComputeHashCode();
- }
- result = GetField32(OFFSET_OF_OBJECT_MEMBER(String, hash_code_));
- DCHECK(result != 0 || ComputeUtf16Hash(GetCharArray(), GetOffset(), GetLength()) == 0)
- << ToModifiedUtf8() << " " << result;
- return result;
-}
-
-void String::ComputeHashCode() {
- SetHashCode(ComputeUtf16Hash(GetCharArray(), GetOffset(), GetLength()));
+int32_t String::ComputeHashCode() {
+ const int32_t hash_code = ComputeUtf16Hash(GetCharArray(), GetOffset(), GetLength());
+ SetHashCode(hash_code);
+ return hash_code;
}
int32_t String::GetUtfLength() {