7177409: Perf regression in JVM_GetClassDeclaredFields after generic signature changes.

Fri, 22 Jun 2012 14:00:39 -0400

author
jiangli
date
Fri, 22 Jun 2012 14:00:39 -0400
changeset 3879
634b8615a6ba
parent 3878
f7baf26515fc
child 3880
06320b1578cb

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

src/share/vm/runtime/fieldDescriptor.cpp file | annotate | diff | comparison | revisions
src/share/vm/runtime/fieldDescriptor.hpp file | annotate | diff | comparison | revisions
src/share/vm/runtime/reflection.cpp file | annotate | diff | comparison | revisions
     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());

mercurial