RFR: 8352075: Perf regression accessing fields [v4]

Radim Vansa rvansa at openjdk.org
Wed May 14 12:54:59 UTC 2025


On Tue, 13 May 2025 11:39:32 GMT, Coleen Phillimore <coleenp at openjdk.org> wrote:

>> Radim Vansa has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Move constant to static final var
>
> Also can you include this:
> 
> diff --git a/src/hotspot/share/oops/fieldInfo.cpp b/src/hotspot/share/oops/fieldInfo.cpp
> index 300b45277ad..7668faf6187 100644
> --- a/src/hotspot/share/oops/fieldInfo.cpp
> +++ b/src/hotspot/share/oops/fieldInfo.cpp
> @@ -37,8 +37,8 @@ void FieldInfo::print(outputStream* os, ConstantPool* cp) {
>                  field_flags().as_uint(),
>                  initializer_index(),
>                  generic_signature_index(),
> -                _field_flags.is_injected() ? lookup_symbol(generic_signature_index())->as_utf8() : cp->symbol_at(generic_signature_index())->as_utf8(),
> -                contended_group());
> +                field_flags().is_generic() ? cp->symbol_at(generic_signature_index())->as_utf8() : "",
> +                is_contended() ? contended_group() : 0);
>  }
>  
> 
> which I fixed for printing.
> 
> Also, sorting the fields is inlined code in parse_fields.  Can you make it it's own method?  And it seems to sort the fields before the injected fields are added, so how do you find the injected fields?  I think injected fields aren't added to klasses with >16 fields maybe?
> 
> I was going to write a test with JVMTI GetFields and > 16 fields because I'm not sure how/if you're fixing the order that the fields are returned by that API.

@coleenp @SirYwell Based on the feedback and considerations from your reviews, I've pushed a version that does not reorder fields. The `CCC` test shows the same performance as the original PR, in case of huge class the improvement is even better (0.23 s vs 0.5 s). The price for O(log(N)) field lookup is 3 bytes per field for medium classes (17 - 256 non-injected fields), 4-5 bytes for bigger classes.
Due to not reordering the fields at all the chance for regression is significantly lower. I have not executed the whole JCK but tried the mentioned test and it does pass.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/24847#issuecomment-2880137455


More information about the hotspot-dev mailing list