RFR(S): 7143511: G1: Another instance of high GC Worker Other time (50ms)

Igor Veresov igor.veresov at oracle.com
Mon Mar 19 17:49:16 PDT 2012

Looks good to me.


On Monday, March 19, 2012 at 10:54 AM, John Cuthbertson wrote:

> Hi Everyone,
> Can I have a couple of volunteers review the changes for this CR? The 
> webrev can be found at: http://cr.openjdk.java.net/~johnc/7143511/webrev.0/.
> I am cc'ing the compiler-dev list as I changed the nmethod class to make 
> the routine nmethod::test_oops_do_mark() available in non-debug builds.
> Summary:
> While running SPECjbb2012, it was noticed that the GC Worker Other time 
> (printed as part of the PrintGCDetails output) was quite high on certain 
> platforms. An investigation discovered that this time was coming from 
> the StrongRootsScope destructor (which is executed by the VM thread and 
> was being incorrectly attributed as part of the parallel time). Most of 
> the time for the StrongRootsScope destructor was coming from walking the 
> marked nmethods list, where the nmethods discovered by the 
> CodeBlobToOops closure in SharedHeap::process_strong_roots() are walked 
> to fix up any oops that may have moved during the GC. Further 
> investigation revealed that the nmethods were being added to the marked 
> list unconditionally. With TieredCompilation, the number of nmethods in 
> the code cache (and the number of oops in each nmethod) significanly 
> increased (~6000 vs. ~700 nmethods and ~115K vs ~15K oops) increasing 
> the time it took to walk the marked nmethod list. It was also observed 
> that most of the nmethods on the marked list did not contain any 
> pointers into the collection set and so the oops that they were pointing 
> to did not move during the GC. The solution was to limit the number of 
> nmethods placed on to the marked list by specializing the 
> CodeBlobToOopClosure to filter out those nmethods that did not point 
> into the collection set.
> The other changes include refactoring the code in G1ParTask:work() and 
> where the G1ParTask is executed in evacuate_collection_set() so that the 
> values printed for the GC Worker Other time and (the new) Code Root 
> Fixup time are accurately calculated.
> Testing: SPECjbb2012 on several platforms; the GC test suite with heap 
> verification after GC enabled.
> Thanks,
> JohnC 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20120319/4af1e3dd/attachment.html 

More information about the hotspot-compiler-dev mailing list