diff options
author | Mathieu Chartier <mathieuc@google.com> | 2013-10-31 10:35:05 -0700 |
---|---|---|
committer | Mathieu Chartier <mathieuc@google.com> | 2013-10-31 13:33:51 -0700 |
commit | 4e6a31eb97f22f4480827474b30b9e64f396eace (patch) | |
tree | 3afe222c60314a22be8bb8de61cb245e1af2dc92 /runtime/lock_word-inl.h | |
parent | 1b8cb967143d5c46db1db8ac940a73d111be3628 (diff) | |
download | art-4e6a31eb97f22f4480827474b30b9e64f396eace.tar.gz art-4e6a31eb97f22f4480827474b30b9e64f396eace.tar.bz2 art-4e6a31eb97f22f4480827474b30b9e64f396eace.zip |
Lazily compute object identity hash codes.
Before, we computed identity hashcodes whenever we inflated a monitor.
This caused issues since it meant that we would have all of these
hash codes in the image, causing locks to excessively inflate during
application run time.
This change makes it so that we lazily compute hash codes. When a
thin lock gets inflated, we assign a hash code of 0 assigned to it.
This value signifies no hash code. When we try to get the identity
hash code of an object with an inflated monitor, it gets computed if
it is 0.
Change-Id: Iae6acd1960515a36e74644e5b1323ff336731806
Diffstat (limited to 'runtime/lock_word-inl.h')
-rw-r--r-- | runtime/lock_word-inl.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/runtime/lock_word-inl.h b/runtime/lock_word-inl.h index 59947f5694..efd3d9d25e 100644 --- a/runtime/lock_word-inl.h +++ b/runtime/lock_word-inl.h @@ -45,7 +45,7 @@ inline LockWord::LockWord(Monitor* mon) DCHECK_EQ(FatLockMonitor(), mon); } -inline uint32_t LockWord::GetHashCode() const { +inline int32_t LockWord::GetHashCode() const { DCHECK_EQ(GetState(), kHashCode); return (value_ >> kHashShift) & kHashMask; } |