EVALUATION
http://hg.openjdk.java.net/jdk7/hotspot/hotspot/rev/6cb8e9df7174
|
|
|
EVALUATION
http://hg.openjdk.java.net/jdk7/hotspot-gc/hotspot/rev/6cb8e9df7174
|
|
|
EVALUATION
Adding an extra timer to the code and running the 32GB heap application confirmed that the culprit is indeed the one mentioned in the previous Evaluation note. clear_and_record_card_counts() would take more than 60ms on relatively state-of-the-art hardware.
|
|
|
EVALUATION
Ramki pointed out that it's not necessarily the same OS thread that gets id 0. And given that it's always thread 0 that has the issue we suspect some pathology in the G1 code.
|
|
|
EVALUATION
Well, with a quick glance at the code I think I've found the culprit.
void
HRInto_G1RemSet::oops_into_collection_set_do(OopsInHeapRegionClosure* oc,
int worker_i) {
...
if (worker_i == 0) {
_cg1r->clear_and_record_card_counts();
}
...
|
|
|