Fri, 22 Jun 2012 14:00:39 -0400
7177409: Perf regression in JVM_GetClassDeclaredFields after generic signature changes.
Summary: In fieldDescriptor::generic_signature() returns NULL immediately if the field has no generic signature.
Reviewed-by: dholmes, coleenp, jcoomes
1.1 --- a/src/share/vm/runtime/fieldDescriptor.cpp Tue Jun 19 21:16:20 2012 -0700 1.2 +++ b/src/share/vm/runtime/fieldDescriptor.cpp Fri Jun 22 14:00:39 2012 -0400 1.3 @@ -39,6 +39,10 @@ 1.4 } 1.5 1.6 Symbol* fieldDescriptor::generic_signature() const { 1.7 + if (!has_generic_signature()) { 1.8 + return NULL; 1.9 + } 1.10 + 1.11 int idx = 0; 1.12 instanceKlass* ik = instanceKlass::cast(field_holder()); 1.13 for (AllFieldStream fs(ik); !fs.done(); fs.next()) {
2.1 --- a/src/share/vm/runtime/fieldDescriptor.hpp Tue Jun 19 21:16:20 2012 -0700 2.2 +++ b/src/share/vm/runtime/fieldDescriptor.hpp Fri Jun 22 14:00:39 2012 -0400 2.3 @@ -100,6 +100,7 @@ 2.4 bool is_field_access_watched() const { return access_flags().is_field_access_watched(); } 2.5 bool is_field_modification_watched() const 2.6 { return access_flags().is_field_modification_watched(); } 2.7 + bool has_generic_signature() const { return access_flags().field_has_generic_signature(); } 2.8 2.9 void set_is_field_access_watched(const bool value) { 2.10 _access_flags.set_is_field_access_watched(value);
3.1 --- a/src/share/vm/runtime/reflection.cpp Tue Jun 19 21:16:20 2012 -0700 3.2 +++ b/src/share/vm/runtime/reflection.cpp Fri Jun 22 14:00:39 2012 -0400 3.3 @@ -829,7 +829,7 @@ 3.4 java_lang_reflect_Field::set_modifiers(rh(), fd->access_flags().as_int() & JVM_RECOGNIZED_FIELD_MODIFIERS); 3.5 java_lang_reflect_Field::set_override(rh(), false); 3.6 if (java_lang_reflect_Field::has_signature_field() && 3.7 - fd->generic_signature() != NULL) { 3.8 + fd->has_generic_signature()) { 3.9 Symbol* gs = fd->generic_signature(); 3.10 Handle sig = java_lang_String::create_from_symbol(gs, CHECK_NULL); 3.11 java_lang_reflect_Field::set_signature(rh(), sig());