diff -r 126c5e7b97b1 -r bc2bb4eee477 src/hotspot/share/classfile/javaClasses.inline.hpp --- a/src/hotspot/share/classfile/javaClasses.inline.hpp Tue Jan 22 10:12:05 2019 +0100 +++ b/src/hotspot/share/classfile/javaClasses.inline.hpp Tue Jan 22 11:22:44 2019 +0100 @@ -71,10 +71,11 @@ 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 @@ } 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();