changeset 57547:f2dad2a448d0

8236732: Shenandoah: Stricter placement for oom-evac scopes Reviewed-by: zgu
author rkennke
date Tue, 07 Jan 2020 21:53:52 +0100
parents 33ce73818099
children 1b28af1e2804
files src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp src/hotspot/share/gc/shenandoah/shenandoahBarrierSetNMethod.cpp src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp src/hotspot/share/gc/shenandoah/shenandoahEvacOOMHandler.cpp src/hotspot/share/gc/shenandoah/shenandoahEvacOOMHandler.hpp src/hotspot/share/gc/shenandoah/shenandoahNMethod.cpp src/hotspot/share/gc/shenandoah/shenandoahParallelCleaning.cpp src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.inline.hpp
diffstat 9 files changed, 4 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp	Tue Jan 07 19:57:11 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp	Tue Jan 07 21:53:52 2020 +0100
@@ -199,12 +199,8 @@
         _heap->in_collection_set(obj) &&
         obj == fwd) {
       Thread *t = Thread::current();
-      if (t->is_GC_task_thread()) {
-        return _heap->evacuate_object(obj, t);
-      } else {
-        ShenandoahEvacOOMScope oom_evac_scope;
-        return _heap->evacuate_object(obj, t);
-      }
+      ShenandoahEvacOOMScope oom_evac_scope;
+      return _heap->evacuate_object(obj, t);
     } else {
       return fwd;
     }
--- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSetNMethod.cpp	Tue Jan 07 19:57:11 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSetNMethod.cpp	Tue Jan 07 21:53:52 2020 +0100
@@ -57,7 +57,6 @@
   }
 
   // Heal oops and disarm
-  ShenandoahEvacOOMScope scope;
   ShenandoahNMethod::heal_nmethod(nm);
   ShenandoahNMethod::disarm_nmethod(nm);
   return true;
--- a/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp	Tue Jan 07 19:57:11 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp	Tue Jan 07 21:53:52 2020 +0100
@@ -215,7 +215,6 @@
 
     if (nm->is_unloading()) {
       ShenandoahReentrantLocker locker(nm_data->lock());
-      ShenandoahEvacOOMScope evac_scope;
       unlink(nm);
       return;
     }
@@ -223,7 +222,6 @@
     ShenandoahReentrantLocker locker(nm_data->lock());
 
     // Heal oops and disarm
-    ShenandoahEvacOOMScope evac_scope;
     if (_heap->is_evacuation_in_progress()) {
       ShenandoahNMethod::heal_nmethod(nm);
     }
--- a/src/hotspot/share/gc/shenandoah/shenandoahEvacOOMHandler.cpp	Tue Jan 07 19:57:11 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahEvacOOMHandler.cpp	Tue Jan 07 21:53:52 2020 +0100
@@ -123,11 +123,3 @@
 ShenandoahEvacOOMScope::~ShenandoahEvacOOMScope() {
   ShenandoahHeap::heap()->leave_evacuation();
 }
-
-ShenandoahEvacOOMScopeLeaver::ShenandoahEvacOOMScopeLeaver() {
-  ShenandoahHeap::heap()->leave_evacuation();
-}
-
-ShenandoahEvacOOMScopeLeaver::~ShenandoahEvacOOMScopeLeaver() {
-  ShenandoahHeap::heap()->enter_evacuation();
-}
--- a/src/hotspot/share/gc/shenandoah/shenandoahEvacOOMHandler.hpp	Tue Jan 07 19:57:11 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahEvacOOMHandler.hpp	Tue Jan 07 21:53:52 2020 +0100
@@ -119,10 +119,4 @@
   ~ShenandoahEvacOOMScope();
 };
 
-class ShenandoahEvacOOMScopeLeaver : public StackObj {
-public:
-  ShenandoahEvacOOMScopeLeaver();
-  ~ShenandoahEvacOOMScopeLeaver();
-};
-
 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHEVACOOMHANDLER_HPP
--- a/src/hotspot/share/gc/shenandoah/shenandoahNMethod.cpp	Tue Jan 07 19:57:11 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahNMethod.cpp	Tue Jan 07 21:53:52 2020 +0100
@@ -174,6 +174,7 @@
   assert(data != NULL, "Sanity");
   assert(data->lock()->owned_by_self(), "Must hold the lock");
 
+  ShenandoahEvacOOMScope evac_scope;
   ShenandoahEvacuateUpdateRootsClosure cl;
   data->oops_do(&cl, true /*fix relocation*/);
 }
--- a/src/hotspot/share/gc/shenandoah/shenandoahParallelCleaning.cpp	Tue Jan 07 19:57:11 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahParallelCleaning.cpp	Tue Jan 07 21:53:52 2020 +0100
@@ -41,7 +41,6 @@
 }
 
 void ShenandoahClassUnloadingTask::work(uint worker_id) {
-  ShenandoahEvacOOMScope scope;
   _code_cache_task.work(worker_id);
   // Clean all klasses that were not unloaded.
   // The weak metadata in klass doesn't need to be
--- a/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp	Tue Jan 07 19:57:11 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp	Tue Jan 07 21:53:52 2020 +0100
@@ -173,7 +173,6 @@
   void work(uint worker_id) {
     ShenandoahParallelWorkerSession worker_session(worker_id);
 
-    ShenandoahEvacOOMScope oom_evac_scope;
     ShenandoahObjToScanQueueSet* queues = _heap->traversal_gc()->task_queues();
     ShenandoahObjToScanQueue* q = queues->queue(worker_id);
 
@@ -214,7 +213,6 @@
   void work(uint worker_id) {
     ShenandoahConcurrentWorkerSession worker_session(worker_id);
     ShenandoahSuspendibleThreadSetJoiner stsj(ShenandoahSuspendibleWorkers);
-    ShenandoahEvacOOMScope oom_evac_scope;
     ShenandoahTraversalGC* traversal_gc = _heap->traversal_gc();
 
     // Drain all outstanding work in queues.
@@ -237,7 +235,6 @@
   void work(uint worker_id) {
     ShenandoahParallelWorkerSession worker_session(worker_id);
 
-    ShenandoahEvacOOMScope oom_evac_scope;
     ShenandoahTraversalGC* traversal_gc = _heap->traversal_gc();
 
     ShenandoahObjToScanQueueSet* queues = traversal_gc->task_queues();
@@ -542,7 +539,6 @@
 
     if (work == 0) {
       // No more work, try to terminate
-      ShenandoahEvacOOMScopeLeaver oom_scope_leaver;
       ShenandoahSuspendibleThreadSetLeaver stsl(sts_yield && ShenandoahSuspendibleWorkers);
       ShenandoahTerminationTimingsTracker term_tracker(worker_id);
       ShenandoahTerminatorTerminator tt(_heap);
@@ -811,7 +807,6 @@
 
   template <class T>
   inline void do_oop_work(T* p) {
-    ShenandoahEvacOOMScope evac_scope;
     _traversal_gc->process_oop<T, false /* string dedup */, false /* degen */, true /* atomic update */>(p, _thread, _queue, _mark_context);
   }
 
@@ -834,7 +829,6 @@
 
   template <class T>
   inline void do_oop_work(T* p) {
-    ShenandoahEvacOOMScope evac_scope;
     _traversal_gc->process_oop<T, false /* string dedup */, true /* degen */, false /* atomic update */>(p, _thread, _queue, _mark_context);
   }
 
@@ -861,7 +855,6 @@
     assert(worker_id == 0, "The code below is single-threaded, only one worker is expected");
     ShenandoahParallelWorkerSession worker_session(worker_id);
     ShenandoahSuspendibleThreadSetJoiner stsj(ShenandoahSuspendibleWorkers);
-    ShenandoahEvacOOMScope oom_evac_scope;
 
     ShenandoahHeap* sh = ShenandoahHeap::heap();
 
@@ -968,7 +961,6 @@
     assert(sh->process_references(), "why else would we be here?");
     shenandoah_assert_rp_isalive_installed();
 
-    ShenandoahEvacOOMScope evac_scope;
     traversal_gc->main_loop(_worker_id, _terminator, false);
 
     if (_reset_terminator) {
@@ -1010,7 +1002,6 @@
   }
 
   void work(uint worker_id) {
-    ShenandoahEvacOOMScope oom_evac_scope;
     assert(ShenandoahSafepoint::is_at_shenandoah_safepoint(), "Must be at a safepoint");
     ShenandoahHeap* heap = ShenandoahHeap::heap();
     ShenandoahTraversalDrainMarkingStackClosure complete_gc(worker_id, _terminator);
--- a/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.inline.hpp	Tue Jan 07 19:57:11 2020 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.inline.hpp	Tue Jan 07 21:53:52 2020 +0100
@@ -51,6 +51,7 @@
     } else if (_heap->in_collection_set(obj)) {
       oop forw = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
       if (obj == forw) {
+        ShenandoahEvacOOMScope evac_scope;
         forw = _heap->evacuate_object(obj, thread);
       }
       shenandoah_assert_forwarded_except(p, obj, _heap->cancelled_gc());