Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8082549 | emb-9 | Kim Barrett | P4 | Resolved | Fixed | team |
The DiscoveredListIterator::update_discovered() function calls the reference processor's _keep_alive function. This is to ensure that the elements in the discovered list are treated as live. However, the only way a reference object can be put on one of the reference processor's discovered set is to be found during liveness analysis, which means all elements of the set are necessarily live and marked as such.
It used to be possible for reference object to be in discovered set to not be live according to the invoking collector mode. The situation where this could occur involved the use of clean_up_discovered_references, which went through the discovered set and removed inactive references and references with marked referents, leaving the rest. This function was used when transitioning between different collector modes (only by CMS, from failed concurrent to full mark sweep), and in the destination mode the marking mechanism might be different from that of the starting mode. However, this can no longer occur, because clean_up_discovered_references was removed byJDK-8066827.
With the removal of clean_up_discovered_references it is no longer possible for a reference processor's discovered set to contain references that are not live, so there is no longer any need to call the _keep_alive function. So update_discovered and its calls can be eliminated.
It used to be possible for reference object to be in discovered set to not be live according to the invoking collector mode. The situation where this could occur involved the use of clean_up_discovered_references, which went through the discovered set and removed inactive references and references with marked referents, leaving the rest. This function was used when transitioning between different collector modes (only by CMS, from failed concurrent to full mark sweep), and in the destination mode the marking mechanism might be different from that of the starting mode. However, this can no longer occur, because clean_up_discovered_references was removed by
With the removal of clean_up_discovered_references it is no longer possible for a reference processor's discovered set to contain references that are not live, so there is no longer any need to call the _keep_alive function. So update_discovered and its calls can be eliminated.
- backported by
-
JDK-8082549 Remove DiscoveredListIterator::update_discovered()
-
- Resolved
-
- is blocked by
-
JDK-8066827 Remove ReferenceProcessor::clean_up_discovered_references()
-
- Resolved
-