RFR (tedious) 8230586 Encapsulate fields in filemap.hpp

Ioi Lam ioi.lam at oracle.com
Tue Sep 10 06:53:49 UTC 2019


Hi Calvin,

Thanks for the review. I've fixed both issues you mentioned. I'll do 
more testing before pushing the changes.

- Ioi

On 9/9/19 8:31 PM, Calvin Cheung wrote:
> Hi Ioi,
>
> The updated webrev looks good.
>
> Just 2 nits in filemap.cpp
>
> 1561     address dumptime_heap_end = (address)header()->heap_end();
>
> Since heap_end() returns an address, the above typecast shouldn't be 
> needed.
>
> Please remove the extra blank line at line 180.
>
> I don't need to see another webrev for the above.
>
> thanks,
>
> Calvin
>
> On 9/9/19 6:56 PM, Ioi Lam wrote:
>> Hi Calvin,
>>
>> thanks for the review. Please see my comments in-line:
>>
>> On 9/6/19 5:00 PM, Calvin Cheung wrote:
>>> Hi Ioi,
>>>
>>> Looks good overall.
>>>
>>> Just a few comments:
>>>
>>> filemap.hpp
>>> ----------
>>> 326   FileMapHeader *header() const       { return _header; }
>>>
>>> This may not be necessary because all references to header() are 
>>> from the class' member functions.
>>> e.g.
>>> 342   int    compute_header_crc()  const { return 
>>> header()->compute_crc(); }
>>>
>>> could be
>>>       int    compute_header_crc()  const { return 
>>> _header->compute_crc(); }
>>>
>>
>> In HotSpot, it's quite common to use the accessor function to access 
>> a class's own fields. E.g., see the calls to 
>> Klass::class_loader_data() in klass.cpp. This makes it easier to 
>> change the implementation of Klass::class_loader_data() when 
>> necessary, without changing every reference to _class_loader_data.
>>
>> In filemap.cpp, I try to remove all use of _xxxx fields, unless it's 
>> near where the field is written into. E.g.,
>>
>>   _header = (FileMapHeader*)os::malloc(header_size, mtInternal);
>>   memset((void*)_header, 0, header_size);
>>   _header->set_header_size(header_size);
>>
>>> 245 MemRegion heap_reserved()                const { return 
>>> _heap_reserved; }
>>>
>>> I couldn't find the _heap_reserved member.
>>>
>>
>> _heap_reserved was removed in JDK-8224815, which wasn't in my repo 
>> when I made the webrev. I have update the repo to use this instead:
>>
>>   address heap_end()                       const { return _heap_end; }
>>
>>
>>
>>> filemap.cpp
>>> ----------
>>> Extra blank line at line 180.
>>>
>>> You have 2 ways of accessing the _header:
>>> e.g.
>>> 196   _header->set_header_size(header_size);
>>>
>>> 214   header()->populate(this, alignment);
>>>
>>> As in the above comment on filemap.hpp, maybe just using _header is 
>>> fine.
>>>
>>
>> See my comments about accessor functions above.
>>
>>> cds.h
>>> ----
>>> 55   int        _is_heap_region;// used in debug build only.
>>>
>>> Needs a blank space after the ';'.
>>>
>> Fixed.
>>
>> Updated webrev is here:
>> http://cr.openjdk.java.net/~iklam/jdk14/8230586-encapsulate-filemap-hpp.v02/ 
>>
>>
>> Thanks
>> - Ioi
>>
>>> thanks,
>>>
>>> Calvin
>>>
>>> On 9/4/19 9:20 AM, Ioi Lam wrote:
>>>> https://bugs.openjdk.java.net/browse/JDK-8230586
>>>> http://cr.openjdk.java.net/~iklam/jdk14/8230586-encapsulate-filemap-hpp.v01/ 
>>>>
>>>>
>>>> Many of the member fields in filemap.hpp are declared with public 
>>>> accessibility.
>>>> This is contrary to HotSpot coding style, and also makes the code
>>>> unnecessarily intertwined.
>>>>
>>>> I made the fields private and added accessor functions where 
>>>> necessary.
>>>>
>>>> Also, FileMapInfo::_header should not be accessed directly from 
>>>> other code.
>>>> I added accessor functions similar to FileMapInfo::core_spaces_size()
>>>> to access information stored in the header.
>>>>
>>>> Testing: hs-tier1, hs-tier2
>>>>
>>>> Thanks
>>>> - Ioi
>>



More information about the hotspot-runtime-dev mailing list