OpenJDK / jdk / jdk
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,