--- a/src/hotspot/share/gc/g1/g1HeapVerifier.cpp Thu Jun 14 11:13:39 2018 +0100
+++ b/src/hotspot/share/gc/g1/g1HeapVerifier.cpp Thu Jun 14 13:07:33 2018 +0200
@@ -315,6 +315,20 @@
guarantee(!r->is_young() || r->rem_set()->is_complete(), "Remembered set for Young region %u must be complete, is %s", r->hrm_index(), r->rem_set()->get_state_str());
// Humongous and old regions regions might be of any state, so can't check here.
guarantee(!r->is_free() || !r->rem_set()->is_tracked(), "Remembered set for free region %u must be untracked, is %s", r->hrm_index(), r->rem_set()->get_state_str());
+ // Verify that the continues humongous regions' remembered set state matches the
+ // one from the starts humongous region.
+ if (r->is_continues_humongous()) {
+ if (r->rem_set()->get_state_str() != r->humongous_start_region()->rem_set()->get_state_str()) {
+ log_error(gc, verify)("Remset states differ: Region %u (%s) remset %s with starts region %u (%s) remset %s",
+ r->hrm_index(),
+ r->get_short_type_str(),
+ r->rem_set()->get_state_str(),
+ r->humongous_start_region()->hrm_index(),
+ r->humongous_start_region()->get_short_type_str(),
+ r->humongous_start_region()->rem_set()->get_state_str());
+ _failures = true;
+ }
+ }
// For archive regions, verify there are no heap pointers to
// non-pinned regions. For all others, verify liveness info.
if (r->is_closed_archive()) {