RFR (S): 8073632: Make auxiliary data structures know their own translation factor
Stefan Karlsson
stefan.karlsson at oracle.com
Thu Apr 23 10:00:31 UTC 2015
On 2015-04-23 10:55, Thomas Schatzl wrote:
> Hi Stefan,
>
> On Wed, 2015-04-22 at 13:25 +0200, Stefan Karlsson wrote:
>> On 2015-04-22 11:02, Thomas Schatzl wrote:
>>> Hi Stefan,
>>>
>>> On Wed, 2015-04-22 at 10:21 +0200, Stefan Karlsson wrote:
>>>> Hi Thomas,
>>>>
>>>> On 2015-04-22 09:56, Thomas Schatzl wrote:
>>>>>> can I have reviews for this change that cleans up recent changes to
>>>>>> memory management in G1. In particular, for every class that represents
>>>>>> an auxiliary data structure in G1 it adds (and then uses) a specific
>>>>>> function that returns the "heap mapping factor" (the amount of bytes a
>>>>>> particular byte of that data structure corresponds in the java heap).
>>>>>> This method is then used instead of gathering it from various places
>>>>>> when allocating that data structure.
>>>>>>
>>>>>> CR:
>>>>>> https://bugs.openjdk.java.net/browse/JDK-8073632
>>>>>>
>>>>>> Webrev:
>>>>>> http://cr.openjdk.java.net/~tschatzl/8073632/webrev/
>>>> http://cr.openjdk.java.net/~tschatzl/8073632/webrev/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.hpp.frames.html
>>>>
>>>> Why is this implemented as a call into G1BlockOffsetSharedArray?
>>>>
>>>> 157 // Returns how many bytes of the heap a single byte of the Card
>>>> Table corresponds to.
>>>> 158 static size_t heap_map_factor() {
>>>> 159 return G1BlockOffsetSharedArray::heap_map_factor();
>>>> 160 }
>>> You are correct, that is unnecessary. It is better to use
>>> CardTableModRefBS::card_size.
>>>
>>> Fixed in
>>> http://cr.openjdk.java.net/~tschatzl/8073632/webrev.1
>>> Diff webrev:
>>> http://cr.openjdk.java.net/~tschatzl/8073632/webrev.0_to_1
>> That looks better.
>>
>> It still seems weird that the card_count is set up using
>> G1BlockOffsetSharedArray:
>>
>> G1RegionToSpaceMapper* card_counts_storage =
>> create_aux_memory_mapper("Card counts table",
>> G1BlockOffsetSharedArray::compute_size(g1_rs.size() / HeapWordSize),
>> - G1BlockOffsetSharedArray::N_bytes);
>> + G1BlockOffsetSharedArray::heap_map_factor());
>>
>> I think the "Card counts table" needs its own functions as well.
> For abstraction purposes, I agree. Internally these functions will just
> forward to the card table one. The Card table(, BOT) and the card counts
> table were intentionally made to have the same granularity, so I think
> this is reasonable to reuse its methods internally.
>
> Fixed in
> http://cr.openjdk.java.net/~tschatzl/8073632/webrev.2
> Diff webrev:
> http://cr.openjdk.java.net/~tschatzl/8073632/webrev.1_to_2
>
> I put the implementations in the cpp file because I do not see a
> performance problem for them.
Looks good.
Thanks,
StefanK
>
> Thanks,
> Thomas
>
>
More information about the hotspot-gc-dev
mailing list