8217442: Optimize native accesses to String.value

Reviewed-by: shade, dholmes
This commit is contained in:
Claes Redestad 2019-01-22 11:22:44 +01:00
parent 5f5d4425c2
commit 911c7ff446
5 changed files with 75 additions and 57 deletions

View file

@ -71,10 +71,11 @@ bool java_lang_String::is_latin1(oop java_string) {
assert(CompactStrings || coder == CODER_UTF16, "Must be UTF16 without CompactStrings");
return coder == CODER_LATIN1;
}
int java_lang_String::length(oop java_string) {
int java_lang_String::length(oop java_string, typeArrayOop value) {
assert(initialized, "Must be initialized");
assert(is_instance(java_string), "must be java_string");
typeArrayOop value = java_lang_String::value_no_keepalive(java_string);
assert(oopDesc::equals_raw(value, java_lang_String::value(java_string)),
"value must be same as java_lang_String::value(java_string)");
if (value == NULL) {
return 0;
}
@ -85,6 +86,12 @@ int java_lang_String::length(oop java_string) {
}
return arr_length;
}
int java_lang_String::length(oop java_string) {
assert(initialized, "Must be initialized");
assert(is_instance(java_string), "must be java_string");
typeArrayOop value = java_lang_String::value_no_keepalive(java_string);
return length(java_string, value);
}
bool java_lang_String::is_instance_inlined(oop obj) {
return obj != NULL && obj->klass() == SystemDictionary::String_klass();