--- old/src/share/vm/classfile/javaClasses.cpp 2014-11-09 16:45:41.424889265 +0300 +++ new/src/share/vm/classfile/javaClasses.cpp 2014-11-09 16:45:41.372889264 +0300 @@ -944,7 +944,7 @@ assert(_group_offset == 0, "offsets should be initialized only once"); Klass* k = SystemDictionary::Thread_klass(); - compute_offset(_name_offset, k, vmSymbols::name_name(), vmSymbols::char_array_signature()); + compute_offset(_name_offset, k, vmSymbols::name_name(), vmSymbols::string_signature()); compute_offset(_group_offset, k, vmSymbols::group_name(), vmSymbols::threadgroup_signature()); compute_offset(_contextClassLoader_offset, k, vmSymbols::contextClassLoader_name(), vmSymbols::classloader_signature()); compute_offset(_inheritedAccessControlContext_offset, k, vmSymbols::inheritedAccessControlContext_name(), vmSymbols::accesscontrolcontext_signature()); @@ -974,14 +974,14 @@ } -typeArrayOop java_lang_Thread::name(oop java_thread) { +oop java_lang_Thread::name(oop java_thread) { oop name = java_thread->obj_field(_name_offset); - assert(name == NULL || (name->is_typeArray() && TypeArrayKlass::cast(name->klass())->element_type() == T_CHAR), "just checking"); - return typeArrayOop(name); + assert(name != NULL, "thread name is NULL"); + return name; } -void java_lang_Thread::set_name(oop java_thread, typeArrayOop name) { +void java_lang_Thread::set_name(oop java_thread, oop name) { assert(java_thread->obj_field(_name_offset) == NULL, "name should be NULL"); java_thread->obj_field_put(_name_offset, name); } --- old/src/share/vm/classfile/javaClasses.hpp 2014-11-09 16:45:41.648889270 +0300 +++ new/src/share/vm/classfile/javaClasses.hpp 2014-11-09 16:45:41.580889268 +0300 @@ -131,7 +131,9 @@ static typeArrayOop value(oop java_string) { assert(initialized && (value_offset > 0), "Must be initialized"); assert(is_instance(java_string), "must be java_string"); - return (typeArrayOop) java_string->obj_field(value_offset); + oop value = java_string->obj_field(value_offset); + assert((value->is_typeArray() && TypeArrayKlass::cast(value->klass())->element_type() == T_CHAR), "expect char[]"); + return typeArrayOop(value); } static unsigned int hash(oop java_string) { assert(initialized && (hash_offset > 0), "Must be initialized"); @@ -345,8 +347,8 @@ // Set JavaThread for instance static void set_thread(oop java_thread, JavaThread* thread); // Name - static typeArrayOop name(oop java_thread); - static void set_name(oop java_thread, typeArrayOop name); + static oop name(oop java_thread); + static void set_name(oop java_thread, oop name); // Priority static ThreadPriority priority(oop java_thread); static void set_priority(oop java_thread, ThreadPriority priority); --- old/src/share/vm/prims/jvmtiEnv.cpp 2014-11-09 16:45:41.880889275 +0300 +++ new/src/share/vm/prims/jvmtiEnv.cpp 2014-11-09 16:45:41.828889274 +0300 @@ -942,7 +942,7 @@ return JVMTI_ERROR_INVALID_THREAD; Handle thread_obj(current_thread, thread_oop); - typeArrayHandle name; + Handle name; ThreadPriority priority; Handle thread_group; Handle context_class_loader; @@ -950,7 +950,7 @@ { MutexLocker mu(Threads_lock); - name = typeArrayHandle(current_thread, java_lang_Thread::name(thread_obj())); + name = Handle(current_thread, java_lang_Thread::name(thread_obj())); priority = java_lang_Thread::priority(thread_obj()); thread_group = Handle(current_thread, java_lang_Thread::threadGroup(thread_obj())); is_daemon = java_lang_Thread::is_daemon(thread_obj()); @@ -961,7 +961,7 @@ { const char *n; if (name() != NULL) { - n = UNICODE::as_utf8((jchar*) name->base(T_CHAR), name->length()); + n = java_lang_String::as_utf8_string(name()); } else { n = UNICODE::as_utf8(NULL, 0); } --- old/src/share/vm/prims/jvmtiTrace.cpp 2014-11-09 16:45:42.088889279 +0300 +++ new/src/share/vm/prims/jvmtiTrace.cpp 2014-11-09 16:45:42.032889278 +0300 @@ -266,11 +266,11 @@ if (threadObj == NULL) { return "NULL"; } - typeArrayOop name = java_lang_Thread::name(threadObj); + oop name = java_lang_Thread::name(threadObj); if (name == NULL) { return ""; } - return UNICODE::as_utf8((jchar*) name->base(T_CHAR), name->length()); + return java_lang_String::as_utf8_string(name); } --- old/src/share/vm/runtime/thread.cpp 2014-11-09 16:45:42.272889283 +0300 +++ new/src/share/vm/runtime/thread.cpp 2014-11-09 16:45:42.220889282 +0300 @@ -2870,14 +2870,12 @@ const char* name_str; oop thread_obj = threadObj(); if (thread_obj != NULL) { - typeArrayOop name = java_lang_Thread::name(thread_obj); + oop name = java_lang_Thread::name(thread_obj); if (name != NULL) { if (buf == NULL) { - name_str = UNICODE::as_utf8((jchar*) name->base(T_CHAR), - name->length()); + name_str = java_lang_String::as_utf8_string(name); } else { - name_str = UNICODE::as_utf8((jchar*) name->base(T_CHAR), - name->length(), buf, buflen); + name_str = java_lang_String::as_utf8_string(name, buf, buflen); } } else if (is_attaching_via_jni()) { // workaround for 6412693 - see 6404306 name_str = "";