From 9f7aff4e4c1cc2de996630668b7e89ddd3aabd7d Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang Date: Tue, 12 Mar 2024 08:08:20 +0000 Subject: [PATCH] 8327788: G1: Improve concurrent reference processing documentation Reviewed-by: kbarrett, gli --- src/hotspot/share/gc/shared/referenceProcessor.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/hotspot/share/gc/shared/referenceProcessor.cpp b/src/hotspot/share/gc/shared/referenceProcessor.cpp index bfd91becac8..274fbd4c749 100644 --- a/src/hotspot/share/gc/shared/referenceProcessor.cpp +++ b/src/hotspot/share/gc/shared/referenceProcessor.cpp @@ -978,10 +978,12 @@ bool ReferenceProcessor::discover_reference(oop obj, ReferenceType rt) { log_develop_trace(gc, ref)("Already discovered reference (" PTR_FORMAT ": %s)", p2i(obj), obj->klass()->internal_name()); - // Check assumption that an object is not potentially - // discovered twice except by concurrent collectors that potentially - // trace the same Reference object twice. - assert(UseG1GC, "Only possible with a concurrent marking collector"); + // Encountering an already-discovered non-strong ref because G1 can restart + // concurrent marking on marking-stack overflow. Must continue to treat + // this non-strong ref as discovered to avoid keeping the referent + // unnecessarily alive. + assert(UseG1GC, "inv"); + assert(_discovery_is_concurrent, "inv"); return true; }