Prepare for verification?
Jesper Wilhelmsson
jesper.wilhelmsson at oracle.com
Wed Aug 20 14:23:44 UTC 2014
Hi,
When removing the generations array I ran in to the following question.
In GenCollectedHeap::do_collection() there is this code:
if (VerifyBeforeGC && i >= VerifyGCLevel &&
total_collections() >= VerifyGCStartAt) {
HandleMark hm; // Discard invalid handles created during verification
if (!prepared_for_verification) {
prepare_for_verify();
prepared_for_verification = true;
}
Universe::verify(" VerifyBeforeGC:");
}
Note that we make sure to run prepare_for_verify() before calling
Universe::verify().
Later there is this code:
if (VerifyAfterGC && i >= VerifyGCLevel &&
total_collections() >= VerifyGCStartAt) {
HandleMark hm; // Discard invalid handles created during verification
Universe::verify(" VerifyAfterGC:");
}
Here we do not prepare for verification.
Now, what happens if we run with VerifyBeforeGC=false and VerifyAfterGC=true?
As far as I can see, only CMS has an implementation for prepare_for_verify(),
where it does things like CompactibleFreeListSpace::repairLinearAllocationBlocks()
I have been playing around with CMS trying to provoke something here but I can't
say that I understand the linear allocation blocks well enough to know how to
create a potentially bad situation. Could there be a problem here or is the
preparation before verification voluntary?
Since I'm rewriting this code slightly I need to know if I should preserve this
behavior or make sure that we have prepared in the after GC case as well.
Thanks,
/Jesper
More information about the hotspot-gc-dev
mailing list