mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-17 01:24:33 +02:00
8275712: Hashtable literal_size functions are broken
Reviewed-by: coleenp, zgu
This commit is contained in:
parent
fab3d6c612
commit
1efe946db7
2 changed files with 24 additions and 19 deletions
|
@ -538,18 +538,19 @@ void StringTable::rehash_table() {
|
|||
}
|
||||
|
||||
// Statistics
|
||||
static int literal_size(oop obj) {
|
||||
// NOTE: this would over-count if (pre-JDK8)
|
||||
// java_lang_Class::has_offset_field() is true and the String.value array is
|
||||
// shared by several Strings. However, starting from JDK8, the String.value
|
||||
// array is not shared anymore.
|
||||
static size_t literal_size(oop obj) {
|
||||
if (obj == NULL) {
|
||||
return 0;
|
||||
} else if (obj->klass() == vmClasses::String_klass()) {
|
||||
return (obj->size() + java_lang_String::value(obj)->size()) * HeapWordSize;
|
||||
} else {
|
||||
return obj->size();
|
||||
}
|
||||
|
||||
size_t word_size = obj->size();
|
||||
|
||||
if (obj->klass() == vmClasses::String_klass()) {
|
||||
// This may overcount if String.value arrays are shared.
|
||||
word_size += java_lang_String::value(obj)->size();
|
||||
}
|
||||
|
||||
return word_size * HeapWordSize;
|
||||
}
|
||||
|
||||
struct SizeFunc : StackObj {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue