< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp
Print this page
rev 60600 : 8251910: Shenandoah: assert(external_guard || result != __null) failed: Invalid JNI handle
*** 1819,1830 ****
}
// Perform handshake to flush out dead oops
{
ShenandoahTimingsTracker t(ShenandoahPhaseTimings::conc_weak_roots_rendezvous);
! ShenandoahRendezvousClosure cl;
! Handshake::execute(&cl);
}
}
}
void ShenandoahHeap::op_class_unloading() {
--- 1819,1829 ----
}
// Perform handshake to flush out dead oops
{
ShenandoahTimingsTracker t(ShenandoahPhaseTimings::conc_weak_roots_rendezvous);
! rendezvous_threads();
}
}
}
void ShenandoahHeap::op_class_unloading() {
*** 1840,1849 ****
--- 1839,1857 ----
ShenandoahConcurrentRootsEvacUpdateTask task(ShenandoahPhaseTimings::conc_strong_roots);
workers()->run_task(&task);
set_concurrent_strong_root_in_progress(false);
}
+ void ShenandoahHeap::op_rendezvous_roots() {
+ rendezvous_threads();
+ }
+
+ void ShenandoahHeap::rendezvous_threads() {
+ ShenandoahRendezvousClosure cl;
+ Handshake::execute(&cl);
+ }
+
class ShenandoahResetUpdateRegionStateClosure : public ShenandoahHeapRegionClosure {
private:
ShenandoahMarkingContext* const _ctx;
public:
ShenandoahResetUpdateRegionStateClosure() : _ctx(ShenandoahHeap::heap()->marking_context()) {}
*** 2898,2907 ****
--- 2906,2925 ----
try_inject_alloc_failure();
op_cleanup_early();
}
+ void ShenandoahHeap::entry_rendezvous_roots() {
+ static const char* msg = "Rendezvous roots";
+ ShenandoahConcurrentPhase gc_phase(msg, ShenandoahPhaseTimings::conc_rendezvous_roots);
+ EventMark em("%s", msg);
+
+ // This phase does not use workers, no need for setup
+ try_inject_alloc_failure();
+ op_rendezvous_roots();
+ }
+
void ShenandoahHeap::entry_cleanup_complete() {
static const char* msg = "Concurrent cleanup";
ShenandoahConcurrentPhase gc_phase(msg, ShenandoahPhaseTimings::conc_cleanup_complete, true /* log_heap_usage */);
EventMark em("%s", msg);
< prev index next >