--- a/src/hotspot/share/gc/parallel/psScavenge.cpp Wed Oct 18 14:31:10 2017 +0200
+++ b/src/hotspot/share/gc/parallel/psScavenge.cpp Wed Oct 18 21:13:35 2017 +0200
@@ -45,6 +45,7 @@
#include "gc/shared/referencePolicy.hpp"
#include "gc/shared/referenceProcessor.hpp"
#include "gc/shared/spaceDecorator.hpp"
+#include "gc/shared/weakProcessor.hpp"
#include "memory/resourceArea.hpp"
#include "logging/log.hpp"
#include "oops/oop.inline.hpp"
@@ -406,14 +407,15 @@
scavenge_midpoint.update();
+ PSKeepAliveClosure keep_alive(promotion_manager);
+ PSEvacuateFollowersClosure evac_followers(promotion_manager);
+
// Process reference objects discovered during scavenge
{
GCTraceTime(Debug, gc, phases) tm("Reference Processing", &_gc_timer);
reference_processor()->setup_policy(false); // not always_clear
reference_processor()->set_active_mt_degree(active_workers);
- PSKeepAliveClosure keep_alive(promotion_manager);
- PSEvacuateFollowersClosure evac_followers(promotion_manager);
ReferenceProcessorStats stats;
ReferenceProcessorPhaseTimes pt(&_gc_timer, reference_processor()->num_q());
if (reference_processor()->processing_is_mt()) {
@@ -441,6 +443,11 @@
}
{
+ GCTraceTime(Debug, gc, phases) tm("Weak Processing", &_gc_timer);
+ WeakProcessor::weak_oops_do(&_is_alive_closure, &keep_alive, &evac_followers);
+ }
+
+ {
GCTraceTime(Debug, gc, phases) tm("Scrub String Table", &_gc_timer);
// Unlink any dead interned Strings and process the remaining live ones.
PSScavengeRootsClosure root_closure(promotion_manager);