preform GC modifications
Thomas Schatzl
thomas.schatzl at oracle.com
Thu Apr 16 10:04:37 UTC 2020
Hi,
On 16.04.20 10:49, Ofir Gordon wrote:
> Thank you very much for the detailed answer.
> I'll take your recomendation to try and use a newer version, it just
> that I'm working on a specific simulator which might have difficulties
> with newer jdk versions, but it worth a try.
>
> If it is ok I would like another followup question, regarding the actual
> method in which the marking phase is preformed (again for the serial gc)
> - when I follow after the calls from GenCollectedHeap::collect(), I can
> see that finaly it gets in a method
> GenCollectedHeap::gen_process_strong_roots(), where I believe the actual
> marking happens? then inside the method it goes to
> SharedHeap::process_strong_roots, and in there, there are many oops_do()
> calls of different classes.
> So my question is, where exactly the marking loop happens for this case?
> and how can it be specified for different types of gc (cause not all go
> the same code paths...)
Probably you are looking at Serial GC minor collections which are called
in that path, but you are interested in major collections which applies
the Mark-Sweep-Compact algorithm that is executed only once in a while
(i.e. when old gen is full).
The entry point you are looking for where marking is happening would be
GenMarkSweep::mark_sweep_phase1().
The actual marking "loop" in Serial GC major gc is done using a
recursion using an explicit (mark) stack (MarkSweep::_marking_stack and
_objarray_stack) by calling MarkSweep::follow_stack() in
MarkSweep::follow_root() which is called by these oops_do() methods you
already found.
Minor gc uses Cheney's two-finger technique.
Thanks,
Thomas
More information about the hotspot-gc-dev
mailing list