8323005: Parallel: Refactor PSPromotionManager::claim_or_forward_depth
Reviewed-by: tschatzl, rrich
This commit is contained in:
parent
16170678a7
commit
2174f6646e
@ -272,9 +272,7 @@ template <class T> void PSPromotionManager::process_array_chunk_work(
|
|||||||
T* p = base + start;
|
T* p = base + start;
|
||||||
T* const chunk_end = base + end;
|
T* const chunk_end = base + end;
|
||||||
while (p < chunk_end) {
|
while (p < chunk_end) {
|
||||||
if (PSScavenge::should_scavenge(p)) {
|
claim_or_forward_depth(p);
|
||||||
claim_or_forward_depth(p);
|
|
||||||
}
|
|
||||||
++p;
|
++p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,11 +56,14 @@ inline void PSPromotionManager::push_depth(ScannerTask task) {
|
|||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
inline void PSPromotionManager::claim_or_forward_depth(T* p) {
|
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");
|
assert(ParallelScavengeHeap::heap()->is_in(p), "pointer outside heap");
|
||||||
oop obj = RawAccess<IS_NOT_NULL>::oop_load(p);
|
T heap_oop = RawAccess<>::oop_load(p);
|
||||||
Prefetch::write(obj->mark_addr(), 0);
|
if (PSScavenge::is_obj_in_young(heap_oop)) {
|
||||||
push_depth(ScannerTask(p));
|
oop obj = CompressedOops::decode_not_null(heap_oop);
|
||||||
|
assert(!PSScavenge::is_obj_in_to_space(obj), "revisiting object?");
|
||||||
|
Prefetch::write(obj->mark_addr(), 0);
|
||||||
|
push_depth(ScannerTask(p));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void PSPromotionManager::promotion_trace_event(oop new_obj, oop old_obj,
|
inline void PSPromotionManager::promotion_trace_event(oop new_obj, oop old_obj,
|
||||||
@ -96,9 +99,7 @@ class PSPushContentsClosure: public BasicOopIterateClosure {
|
|||||||
PSPushContentsClosure(PSPromotionManager* pm) : BasicOopIterateClosure(PSScavenge::reference_processor()), _pm(pm) {}
|
PSPushContentsClosure(PSPromotionManager* pm) : BasicOopIterateClosure(PSScavenge::reference_processor()), _pm(pm) {}
|
||||||
|
|
||||||
template <typename T> void do_oop_work(T* p) {
|
template <typename T> void do_oop_work(T* p) {
|
||||||
if (PSScavenge::should_scavenge(p)) {
|
_pm->claim_or_forward_depth(p);
|
||||||
_pm->claim_or_forward_depth(p);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void do_oop(oop* p) { do_oop_work(p); }
|
virtual void do_oop(oop* p) { do_oop_work(p); }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user