mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-26 14:24:46 +02:00
8211446: Replace oop_pc_follow_contents with oop_iterate and closure
Reviewed-by: sjohanss, tschatzl
This commit is contained in:
parent
4bc903d17a
commit
78fe66c3bb
14 changed files with 94 additions and 173 deletions
|
@ -846,18 +846,43 @@ PSParallelCompact::IsAliveClosure PSParallelCompact::_is_alive_closure;
|
|||
|
||||
bool PSParallelCompact::IsAliveClosure::do_object_b(oop p) { return mark_bitmap()->is_marked(p); }
|
||||
|
||||
class PCReferenceProcessor: public ReferenceProcessor {
|
||||
public:
|
||||
PCReferenceProcessor(
|
||||
BoolObjectClosure* is_subject_to_discovery,
|
||||
BoolObjectClosure* is_alive_non_header) :
|
||||
ReferenceProcessor(is_subject_to_discovery,
|
||||
ParallelRefProcEnabled && (ParallelGCThreads > 1), // mt processing
|
||||
ParallelGCThreads, // mt processing degree
|
||||
true, // mt discovery
|
||||
ParallelGCThreads, // mt discovery degree
|
||||
true, // atomic_discovery
|
||||
is_alive_non_header) {
|
||||
}
|
||||
|
||||
template<typename T> bool discover(oop obj, ReferenceType type) {
|
||||
T* referent_addr = (T*) java_lang_ref_Reference::referent_addr_raw(obj);
|
||||
T heap_oop = RawAccess<>::oop_load(referent_addr);
|
||||
oop referent = CompressedOops::decode_not_null(heap_oop);
|
||||
return PSParallelCompact::mark_bitmap()->is_unmarked(referent)
|
||||
&& ReferenceProcessor::discover_reference(obj, type);
|
||||
}
|
||||
virtual bool discover_reference(oop obj, ReferenceType type) {
|
||||
if (UseCompressedOops) {
|
||||
return discover<narrowOop>(obj, type);
|
||||
} else {
|
||||
return discover<oop>(obj, type);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void PSParallelCompact::post_initialize() {
|
||||
ParallelScavengeHeap* heap = ParallelScavengeHeap::heap();
|
||||
_span_based_discoverer.set_span(heap->reserved_region());
|
||||
_ref_processor =
|
||||
new ReferenceProcessor(&_span_based_discoverer,
|
||||
ParallelRefProcEnabled && (ParallelGCThreads > 1), // mt processing
|
||||
ParallelGCThreads, // mt processing degree
|
||||
true, // mt discovery
|
||||
ParallelGCThreads, // mt discovery degree
|
||||
true, // atomic_discovery
|
||||
&_is_alive_closure, // non-header is alive closure
|
||||
false); // disable adjusting number of processing threads
|
||||
new PCReferenceProcessor(&_span_based_discoverer,
|
||||
&_is_alive_closure); // non-header is alive closure
|
||||
|
||||
_counters = new CollectorCounters("PSParallelCompact", 1);
|
||||
|
||||
// Initialize static fields in ParCompactionManager.
|
||||
|
@ -2077,7 +2102,7 @@ void PSParallelCompact::marking_phase(ParCompactionManager* cm,
|
|||
TaskQueueSetSuper* qset = ParCompactionManager::stack_array();
|
||||
ParallelTaskTerminator terminator(active_gc_threads, qset);
|
||||
|
||||
ParCompactionManager::MarkAndPushClosure mark_and_push_closure(cm);
|
||||
PCMarkAndPushClosure mark_and_push_closure(cm);
|
||||
ParCompactionManager::FollowStackClosure follow_stack_closure(cm);
|
||||
|
||||
// Need new claim bits before marking starts.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue