changeset 59684:474709480635

8246718: ParallelGC should not check for forward objects for copy task queue Summary: Prefetch task's oop markword and unconditionally push task. Reviewed-by: tschatzl, eosterlund
author kbarrett
date Tue, 09 Jun 2020 18:42:00 -0400
parents a99b2ab49b5b
children 945a221fe98f
files src/hotspot/share/gc/parallel/psPromotionManager.hpp src/hotspot/share/gc/parallel/psPromotionManager.inline.hpp
diffstat 2 files changed, 4 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/src/hotspot/share/gc/parallel/psPromotionManager.hpp	Tue Jun 09 14:46:08 2020 -0700
+++ b/src/hotspot/share/gc/parallel/psPromotionManager.hpp	Tue Jun 09 18:42:00 2020 -0400
@@ -99,7 +99,6 @@
   static MutableSpace* young_space() { return _young_space; }
 
   inline static PSPromotionManager* manager_array(uint index);
-  template <class T> inline void claim_or_forward_internal_depth(T* p);
 
   template <class T> void  process_array_chunk_work(oop obj,
                                                     int start, int end);
--- a/src/hotspot/share/gc/parallel/psPromotionManager.inline.hpp	Tue Jun 09 14:46:08 2020 -0700
+++ b/src/hotspot/share/gc/parallel/psPromotionManager.inline.hpp	Tue Jun 09 18:42:00 2020 -0400
@@ -36,6 +36,7 @@
 #include "memory/iterator.inline.hpp"
 #include "oops/access.inline.hpp"
 #include "oops/oop.inline.hpp"
+#include "runtime/prefetch.inline.hpp"
 
 inline PSPromotionManager* PSPromotionManager::manager_array(uint index) {
   assert(_manager_array != NULL, "access of NULL manager_array");
@@ -48,28 +49,12 @@
 }
 
 template <class T>
-inline void PSPromotionManager::claim_or_forward_internal_depth(T* p) {
-  if (p != NULL) { // XXX: error if p != NULL here
-    oop o = RawAccess<IS_NOT_NULL>::oop_load(p);
-    if (o->is_forwarded()) {
-      o = o->forwardee();
-      // Card mark
-      if (PSScavenge::is_obj_in_young(o)) {
-        PSScavenge::card_table()->inline_write_ref_field_gc(p, o);
-      }
-      RawAccess<IS_NOT_NULL>::oop_store(p, o);
-    } else {
-      push_depth(ScannerTask(p));
-    }
-  }
-}
-
-template <class T>
 inline void PSPromotionManager::claim_or_forward_depth(T* p) {
   assert(should_scavenge(p, true), "revisiting object?");
   assert(ParallelScavengeHeap::heap()->is_in(p), "pointer outside heap");
-
-  claim_or_forward_internal_depth(p);
+  oop obj = RawAccess<IS_NOT_NULL>::oop_load(p);
+  Prefetch::write(obj->mark_addr_raw(), 0);
+  push_depth(ScannerTask(p));
 }
 
 inline void PSPromotionManager::promotion_trace_event(oop new_obj, oop old_obj,