RFR: JDK-8264987: G1: Fill BOTs for Survivor-turned-to-Old regions in full gc
Hamlin Li
mli at openjdk.java.net
Wed Apr 14 04:25:55 UTC 2021
On Wed, 14 Apr 2021 04:18:54 GMT, Hamlin Li <mli at openjdk.org> wrote:
>> I realize that we need to keep the previous address in the closure as well, for the case when we step over the threshold because of an unmarked object.
>
> Hi Stefan, Thanks for the suggestion.
> At first thought, I think it's a good way to reuse the traversal ability of HeapRegion::apply_to_marked_objects.
>
> But when I try to implement it actually, seems to me it might make the code a little complicated.
>
> For the first part, in the new G1UpdateBotClosure, we need to indroduce an _pre_addr as you suggested. this part is implemented as below, it's not that complicated, please check the following code snippet:
>
> void G1FullGCPrepareTask::G1CalculatePointersClosure::update_bot(HeapRegion* hr) {
> G1UpdateBotClosure updateBot(hr);
> hr->apply_to_marked_objects(_bitmap, &updateBot);
> }
>
> G1FullGCPrepareTask::G1UpdateBotClosure::G1UpdateBotClosure(HeapRegion* hr) :
> _hr(hr),
> _pre_addr(hr->bottom()),
> _threshold(hr->initialize_threshold()) { }
>
> size_t G1FullGCPrepareTask::G1UpdateBotClosure::apply(oop object) {
> HeapWord* addr = cast_from_oop<HeapWord*>(object);
> size_t size = object->size();
> HeapWord* next_addr = addr + size;
>
> if(addr > _threshold) {
> _threshold = _hr->cross_threshold(_pre_addr, addr);
> }
> if (next_addr > _threshold) {
> _threshold = _hr->cross_threshold(addr, next_addr);
> }
> _pre_addr = next_addr;+ return size;
> }
>
>
>
> But, the above code does not consider the situation: one or several dead objects are at the end of the heap region, at this situation, we needs to update the bot outside of the G1UpdateBotClosure after hr->apply_to_marked_objects(...). I did not implement this part yet, but seems to me it makes the code a little complicated and not that readable, so would like to discuss with you first.
>
> In summary, seems it does not make the code more readable, and will increase the complexity.
> How do you think about it?
BTW, may I ask what's the format do you use the quote a snippet of code, seems my snippet of code lost all format info(e.g. indent).
-------------
PR: https://git.openjdk.java.net/jdk/pull/3459
More information about the hotspot-gc-dev
mailing list