--- old/src/hotspot/share/classfile/systemDictionary.cpp 2018-08-15 12:37:03.847817699 -0400 +++ new/src/hotspot/share/classfile/systemDictionary.cpp 2018-08-15 12:37:03.659817705 -0400 @@ -1858,10 +1858,19 @@ } } + // TODO: just return if !unloading_occurred. if (unloading_occurred) { - GCTraceTime(Debug, gc, phases) t("Dictionary", gc_timer); - constraints()->purge_loader_constraints(); - resolution_errors()->purge_resolution_errors(); + { + GCTraceTime(Debug, gc, phases) t("SymbolTable", gc_timer); + // Check if there's work to do in the SymbolTable + SymbolTable::do_check_concurrent_work(); + } + + { + GCTraceTime(Debug, gc, phases) t("Dictionary", gc_timer); + constraints()->purge_loader_constraints(); + resolution_errors()->purge_resolution_errors(); + } } {