6810653: Change String cache class used by Hotspot from String to StringValue
Summary: Change create_vm() to load and initialize StringValue rather than String.
Reviewed-by: kvn
--- a/hotspot/src/share/vm/classfile/vmSymbols.hpp Tue Mar 24 12:19:47 2009 -0700
+++ b/hotspot/src/share/vm/classfile/vmSymbols.hpp Tue Mar 24 21:56:53 2009 -0400
@@ -49,6 +49,7 @@
template(java_lang_Object, "java/lang/Object") \
template(java_lang_Class, "java/lang/Class") \
template(java_lang_String, "java/lang/String") \
+ template(java_lang_StringValue, "java/lang/StringValue") \
template(java_lang_Thread, "java/lang/Thread") \
template(java_lang_ThreadGroup, "java/lang/ThreadGroup") \
template(java_lang_Cloneable, "java/lang/Cloneable") \
--- a/hotspot/src/share/vm/runtime/thread.cpp Tue Mar 24 12:19:47 2009 -0700
+++ b/hotspot/src/share/vm/runtime/thread.cpp Tue Mar 24 21:56:53 2009 -0400
@@ -3007,17 +3007,19 @@
}
if (UseStringCache) {
- // Forcibly initialize java/lang/String and mutate the private
+ // Forcibly initialize java/lang/StringValue and mutate the private
// static final "stringCacheEnabled" field before we start creating instances
- klassOop k_o = SystemDictionary::resolve_or_null(vmSymbolHandles::java_lang_String(), Handle(), Handle(), CHECK_0);
- KlassHandle k = KlassHandle(THREAD, k_o);
- guarantee(k.not_null(), "Must find java/lang/String");
- instanceKlassHandle ik = instanceKlassHandle(THREAD, k());
- ik->initialize(CHECK_0);
- fieldDescriptor fd;
- // Possible we might not find this field; if so, don't break
- if (ik->find_local_field(vmSymbols::stringCacheEnabled_name(), vmSymbols::bool_signature(), &fd)) {
- k()->bool_field_put(fd.offset(), true);
+ klassOop k_o = SystemDictionary::resolve_or_null(vmSymbolHandles::java_lang_StringValue(), Handle(), Handle(), CHECK_0);
+ // Possible that StringValue isn't present: if so, silently don't break
+ if (k_o != NULL) {
+ KlassHandle k = KlassHandle(THREAD, k_o);
+ instanceKlassHandle ik = instanceKlassHandle(THREAD, k());
+ ik->initialize(CHECK_0);
+ fieldDescriptor fd;
+ // Possible we might not find this field: if so, silently don't break
+ if (ik->find_local_field(vmSymbols::stringCacheEnabled_name(), vmSymbols::bool_signature(), &fd)) {
+ k()->bool_field_put(fd.offset(), true);
+ }
}
}
}