8370406: Parallel: Refactor ParCompactionManager::mark_and_push

Reviewed-by: fandreuzzi, iwalulya
This commit is contained in:
Albert Mingkun Yang 2025-10-23 11:09:33 +00:00
parent da968dc645
commit 5a83d6a835
2 changed files with 19 additions and 22 deletions

View File

@ -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.

View File

@ -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 <typename T>
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() {