8364504: [BACKOUT] JDK-8364176 Serial: Group all class unloading logic at the end of marking phase

Reviewed-by: dholmes
This commit is contained in:
Albert Mingkun Yang 2025-08-01 05:59:33 +00:00
parent 724e8c076e
commit 913d318c97
2 changed files with 13 additions and 12 deletions

View File

@ -525,9 +525,7 @@ void SerialFullGC::phase1_mark(bool clear_all_softrefs) {
{
GCTraceTime(Debug, gc, phases) tm_m("Class Unloading", gc_timer());
ClassUnloadingContext ctx(1 /* num_nmethod_unlink_workers */,
false /* unregister_nmethods_during_purge */,
false /* lock_nmethod_free_separately */);
ClassUnloadingContext* ctx = ClassUnloadingContext::context();
bool unloading_occurred;
{
@ -543,7 +541,7 @@ void SerialFullGC::phase1_mark(bool clear_all_softrefs) {
{
GCTraceTime(Debug, gc, phases) t("Purge Unlinked NMethods", gc_timer());
// Release unloaded nmethod's memory.
ctx.purge_nmethods();
ctx->purge_nmethods();
}
{
GCTraceTime(Debug, gc, phases) ur("Unregister NMethods", gc_timer());
@ -551,7 +549,7 @@ void SerialFullGC::phase1_mark(bool clear_all_softrefs) {
}
{
GCTraceTime(Debug, gc, phases) t("Free Code Blobs", gc_timer());
ctx.free_nmethods();
ctx->free_nmethods();
}
// Prune dead klasses from subklass/sibling/implementor lists.
@ -559,13 +557,6 @@ void SerialFullGC::phase1_mark(bool clear_all_softrefs) {
// Clean JVMCI metadata handles.
JVMCI_ONLY(JVMCI::do_unloading(unloading_occurred));
// Delete metaspaces for unloaded class loaders and clean up loader_data graph
ClassLoaderDataGraph::purge(true /* at_safepoint */);
DEBUG_ONLY(MetaspaceUtils::verify();)
// Need to clear claim bits for the next mark.
ClassLoaderDataGraph::clear_claimed_marks();
}
{

View File

@ -603,6 +603,9 @@ void SerialHeap::do_full_collection(bool clear_all_soft_refs) {
gc_prologue();
COMPILER2_OR_JVMCI_PRESENT(DerivedPointerTable::clear());
CodeCache::on_gc_marking_cycle_start();
ClassUnloadingContext ctx(1 /* num_nmethod_unlink_workers */,
false /* unregister_nmethods_during_purge */,
false /* lock_nmethod_free_separately */);
STWGCTimer* gc_timer = SerialFullGC::gc_timer();
gc_timer->register_gc_start();
@ -627,6 +630,13 @@ void SerialHeap::do_full_collection(bool clear_all_soft_refs) {
_old_gen->compute_new_size();
_young_gen->compute_new_size();
// Delete metaspaces for unloaded class loaders and clean up loader_data graph
ClassLoaderDataGraph::purge(/*at_safepoint*/true);
DEBUG_ONLY(MetaspaceUtils::verify();)
// Need to clear claim bits for the next mark.
ClassLoaderDataGraph::clear_claimed_marks();
_old_gen->update_promote_stats();
// Resize the metaspace capacity after full collections