On Mon, 13 Mar 2023 16:26:06 GMT, Frederic Parain <fpar...@openjdk.org> wrote:

>> Please review this change re-implementing the FieldInfo data structure.
>> 
>> The FieldInfo array is an old data structure storing fields metadata. It has 
>> poor extension capabilities, a complex management code because of lack of 
>> strong typing and semantic overloading, and a poor memory efficiency.
>> 
>> The new implementation uses a compressed stream to store those metadata, 
>> achieving better memory density and providing flexible extensibility, while 
>> exposing a strongly typed set of data when uncompressed. The stream is 
>> compressed using the unsigned5 encoding, which alreay present in the JDK 
>> (because of pack200) and the JVM (because JIT compulers use it to comrpess 
>> debugging information).
>> 
>> More technical details are available in the CR: 
>> https://bugs.openjdk.org/browse/JDK-8292818
>> 
>> Those changes include a re-organisation of fields' flags, splitting the 
>> previous heterogeneous AccessFlags field into three distincts flag 
>> categories: immutable flags from the class file, immutable fields defined by 
>> the JVM, and finally mutable flags defined by the JVM.
>> 
>> The SA, CI, and JVMCI, which all used to access the old FieldInfo array, 
>> have been updated too to deal with the new FieldInfo format.
>> 
>> Tested with mach5, tier 1 to 7.
>> 
>> Thank you.
>
> Frederic Parain has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   SA additional caching from Chris Plummer

Most minor comments but one .inline.hpp still in an hpp file.

I should point out that I only skimmed the SA and JVMCI changes.

src/hotspot/share/jvmci/jvmciCompilerToVM.cpp line 2653:

> 2651:   }
> 2652:   InstanceKlass* iklass = InstanceKlass::cast(klass);
> 2653:   if (index < 0 ||index > iklass->total_fields_count()) {

nit: need space after ||

src/hotspot/share/oops/fieldInfo.cpp line 45:

> 43: }
> 44: 
> 45: void FieldInfo::print_from_growable_array(GrowableArray<FieldInfo>* 
> array, outputStream* os, ConstantPool* cp) {

For consistency, can you make the outputStream parameter first?

src/hotspot/share/oops/instanceKlass.hpp line 32:

> 30: #include "oops/constMethod.hpp"
> 31: #include "oops/constantPool.hpp"
> 32: #include "oops/fieldInfo.inline.hpp"

This shouldn't have an inline.hpp inclusion.

src/hotspot/share/runtime/vmStructs.cpp line 2304:

> 2302:   declare_constant(FieldInfo::FieldFlags::_ff_generic)                  
>   \
> 2303:   declare_constant(FieldInfo::FieldFlags::_ff_stable)                   
>   \
> 2304:   declare_constant(FieldInfo::FieldFlags::_ff_contended)                
>   \

If there are flags that SA doesn't use, like contended, I don't think they 
should be included in the information that we pass to SA.

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

Changes requested by coleenp (Reviewer).

PR: https://git.openjdk.org/jdk/pull/12855

Reply via email to