Avoid collecting young gen while doing the full GC

Y. Srinivas Ramakrishna Y.S.Ramakrishna at Sun.COM
Wed Mar 24 01:06:46 UTC 2010

Good point. You'd think that the current compacting collectors would
do this (either in the pointer update phase or as you suggest the short-cut
of conditionally dirtying the entire old and perm gens) if the compacted
data did not all fit in the old gen and some of it overflowed into
young. I haven't looked at the code in a while, and I wonder which
(if either, yikes!) is actually done. I'll take a look when i get
some free time unless someone else gets to it first ;-)

-- ramki

Tony Printezis wrote:
> Tony,
> You also have to make sure that the card table (the data structure that 
> keeps track of old-to-young refs) is left consistent at the end of the 
> GCs. So, as you move old objects that point to the young gen, you might 
> have to update the card table accordingly. An easy way to do that (good 
> to at least make sure that the rest of the implementation is working 
> correctly) is to dirty the cards of the entire old gen. This will make 
> the next young GCs really slow, but the young collector should deal with 
> it correctly and clean up the card table as necessary.
> I'm also curious why you want to do this. My wild guess would be that 
> you're maybe using a huge young gen, relatively to the old gen, and as a 
> result it's better to let the young collector deal with it rather than 
> compacting it (which would be much slower).
> Tony
> Y. Srinivas Ramakrishna wrote:
>> Hi Tony --
>> On 03/23/10 10:57, Tony Guan wrote:
>>> Hi all,
>>> In my current project, one crazy idea is to leave the young generation
>>> untouched(not collected) during a Full Gc. Is it feasible if I want to
>>> collect the tenured gen only in a full GC?
>>> To do this, the young gen should be included as part of the root set,
>>> and the reference processor should only care about the old gen. Is
>>> there anything else I should take care of?
>> Yes, i believe that should work. (In fact, the CMS collector, which 
>> collects
>> only the old gen and perm gen, does pretty much that. There are some 
>> disadvantages
>> to it though, for example, dead objects in the young gen possibly keeping
>> objects in old and perm gen artificially alive, but such cases are 
>> probably
>> rare.)
>> Just out of curiosity, when and wny would you want to not collect the 
>> young gen?
>> -- ramki
>>> Thanks!
>>> Tony

More information about the hotspot-gc-dev mailing list