diff --git a/src/hotspot/share/gc/parallel/psCompactionManager.hpp b/src/hotspot/share/gc/parallel/psCompactionManager.hpp index 613361c7039..0a404579da8 100644 --- a/src/hotspot/share/gc/parallel/psCompactionManager.hpp +++ b/src/hotspot/share/gc/parallel/psCompactionManager.hpp @@ -188,7 +188,6 @@ public: ParMarkBitMap* mark_bitmap() { return _mark_bitmap; } // Save for later processing. Must not fail. - inline void push(oop obj); inline void push_region(size_t index); // Check mark and maybe push on marking stack. diff --git a/src/hotspot/share/gc/parallel/psCompactionManager.inline.hpp b/src/hotspot/share/gc/parallel/psCompactionManager.inline.hpp index 75f54caf89e..663cd83be9c 100644 --- a/src/hotspot/share/gc/parallel/psCompactionManager.inline.hpp +++ b/src/hotspot/share/gc/parallel/psCompactionManager.inline.hpp @@ -56,10 +56,6 @@ inline bool ParCompactionManager::steal(int queue_num, size_t& region) { return region_task_queues()->steal(queue_num, region); } -inline void ParCompactionManager::push(oop obj) { - marking_stack()->push(ScannerTask(obj)); -} - void ParCompactionManager::push_region(size_t index) { #ifdef ASSERT @@ -74,24 +70,26 @@ void ParCompactionManager::push_region(size_t index) template inline void ParCompactionManager::mark_and_push(T* p) { T heap_oop = RawAccess<>::oop_load(p); - if (!CompressedOops::is_null(heap_oop)) { - oop obj = CompressedOops::decode_not_null(heap_oop); - assert(ParallelScavengeHeap::heap()->is_in(obj), "should be in heap"); - - if (mark_bitmap()->mark_obj(obj)) { - if (StringDedup::is_enabled() && - java_lang_String::is_instance(obj) && - psStringDedup::is_candidate_from_mark(obj)) { - _string_dedup_requests.add(obj); - } - - ContinuationGCSupport::transform_stack_chunk(obj); - - assert(_marking_stats_cache != nullptr, "inv"); - _marking_stats_cache->push(obj, obj->size()); - push(obj); - } + if (CompressedOops::is_null(heap_oop)) { + return; } + + oop obj = CompressedOops::decode_not_null(heap_oop); + if (!mark_bitmap()->mark_obj(obj)) { + // Marked by another worker. + return; + } + + if (StringDedup::is_enabled() && + java_lang_String::is_instance(obj) && + psStringDedup::is_candidate_from_mark(obj)) { + _string_dedup_requests.add(obj); + } + + ContinuationGCSupport::transform_stack_chunk(obj); + + _marking_stats_cache->push(obj, obj->size()); + marking_stack()->push(ScannerTask(obj)); } inline void ParCompactionManager::FollowStackClosure::do_void() {