mirror of
https://github.com/openjdk/jdk.git
synced 2026-02-15 12:55:07 +00:00
8236732: Shenandoah: Stricter placement for oom-evac scopes
Reviewed-by: zgu
This commit is contained in:
parent
9e09ba5e13
commit
ba6cedcf24
@ -199,12 +199,8 @@ oop ShenandoahBarrierSet::load_reference_barrier_impl(oop obj) {
|
||||
_heap->in_collection_set(obj) &&
|
||||
obj == fwd) {
|
||||
Thread *t = Thread::current();
|
||||
if (t->is_GC_task_thread()) {
|
||||
return _heap->evacuate_object(obj, t);
|
||||
} else {
|
||||
ShenandoahEvacOOMScope oom_evac_scope;
|
||||
return _heap->evacuate_object(obj, t);
|
||||
}
|
||||
ShenandoahEvacOOMScope oom_evac_scope;
|
||||
return _heap->evacuate_object(obj, t);
|
||||
} else {
|
||||
return fwd;
|
||||
}
|
||||
|
||||
@ -57,7 +57,6 @@ bool ShenandoahBarrierSetNMethod::nmethod_entry_barrier(nmethod* nm) {
|
||||
}
|
||||
|
||||
// Heal oops and disarm
|
||||
ShenandoahEvacOOMScope scope;
|
||||
ShenandoahNMethod::heal_nmethod(nm);
|
||||
ShenandoahNMethod::disarm_nmethod(nm);
|
||||
return true;
|
||||
|
||||
@ -215,7 +215,6 @@ public:
|
||||
|
||||
if (nm->is_unloading()) {
|
||||
ShenandoahReentrantLocker locker(nm_data->lock());
|
||||
ShenandoahEvacOOMScope evac_scope;
|
||||
unlink(nm);
|
||||
return;
|
||||
}
|
||||
@ -223,7 +222,6 @@ public:
|
||||
ShenandoahReentrantLocker locker(nm_data->lock());
|
||||
|
||||
// Heal oops and disarm
|
||||
ShenandoahEvacOOMScope evac_scope;
|
||||
if (_heap->is_evacuation_in_progress()) {
|
||||
ShenandoahNMethod::heal_nmethod(nm);
|
||||
}
|
||||
|
||||
@ -123,11 +123,3 @@ ShenandoahEvacOOMScope::ShenandoahEvacOOMScope() {
|
||||
ShenandoahEvacOOMScope::~ShenandoahEvacOOMScope() {
|
||||
ShenandoahHeap::heap()->leave_evacuation();
|
||||
}
|
||||
|
||||
ShenandoahEvacOOMScopeLeaver::ShenandoahEvacOOMScopeLeaver() {
|
||||
ShenandoahHeap::heap()->leave_evacuation();
|
||||
}
|
||||
|
||||
ShenandoahEvacOOMScopeLeaver::~ShenandoahEvacOOMScopeLeaver() {
|
||||
ShenandoahHeap::heap()->enter_evacuation();
|
||||
}
|
||||
|
||||
@ -119,10 +119,4 @@ public:
|
||||
~ShenandoahEvacOOMScope();
|
||||
};
|
||||
|
||||
class ShenandoahEvacOOMScopeLeaver : public StackObj {
|
||||
public:
|
||||
ShenandoahEvacOOMScopeLeaver();
|
||||
~ShenandoahEvacOOMScopeLeaver();
|
||||
};
|
||||
|
||||
#endif // SHARE_GC_SHENANDOAH_SHENANDOAHEVACOOMHANDLER_HPP
|
||||
|
||||
@ -174,6 +174,7 @@ void ShenandoahNMethod::heal_nmethod(nmethod* nm) {
|
||||
assert(data != NULL, "Sanity");
|
||||
assert(data->lock()->owned_by_self(), "Must hold the lock");
|
||||
|
||||
ShenandoahEvacOOMScope evac_scope;
|
||||
ShenandoahEvacuateUpdateRootsClosure cl;
|
||||
data->oops_do(&cl, true /*fix relocation*/);
|
||||
}
|
||||
|
||||
@ -41,7 +41,6 @@ ShenandoahClassUnloadingTask::ShenandoahClassUnloadingTask(BoolObjectClosure* is
|
||||
}
|
||||
|
||||
void ShenandoahClassUnloadingTask::work(uint worker_id) {
|
||||
ShenandoahEvacOOMScope scope;
|
||||
_code_cache_task.work(worker_id);
|
||||
// Clean all klasses that were not unloaded.
|
||||
// The weak metadata in klass doesn't need to be
|
||||
|
||||
@ -173,7 +173,6 @@ public:
|
||||
void work(uint worker_id) {
|
||||
ShenandoahParallelWorkerSession worker_session(worker_id);
|
||||
|
||||
ShenandoahEvacOOMScope oom_evac_scope;
|
||||
ShenandoahObjToScanQueueSet* queues = _heap->traversal_gc()->task_queues();
|
||||
ShenandoahObjToScanQueue* q = queues->queue(worker_id);
|
||||
|
||||
@ -214,7 +213,6 @@ public:
|
||||
void work(uint worker_id) {
|
||||
ShenandoahConcurrentWorkerSession worker_session(worker_id);
|
||||
ShenandoahSuspendibleThreadSetJoiner stsj(ShenandoahSuspendibleWorkers);
|
||||
ShenandoahEvacOOMScope oom_evac_scope;
|
||||
ShenandoahTraversalGC* traversal_gc = _heap->traversal_gc();
|
||||
|
||||
// Drain all outstanding work in queues.
|
||||
@ -237,7 +235,6 @@ public:
|
||||
void work(uint worker_id) {
|
||||
ShenandoahParallelWorkerSession worker_session(worker_id);
|
||||
|
||||
ShenandoahEvacOOMScope oom_evac_scope;
|
||||
ShenandoahTraversalGC* traversal_gc = _heap->traversal_gc();
|
||||
|
||||
ShenandoahObjToScanQueueSet* queues = traversal_gc->task_queues();
|
||||
@ -542,7 +539,6 @@ void ShenandoahTraversalGC::main_loop_work(T* cl, jushort* live_data, uint worke
|
||||
|
||||
if (work == 0) {
|
||||
// No more work, try to terminate
|
||||
ShenandoahEvacOOMScopeLeaver oom_scope_leaver;
|
||||
ShenandoahSuspendibleThreadSetLeaver stsl(sts_yield && ShenandoahSuspendibleWorkers);
|
||||
ShenandoahTerminationTimingsTracker term_tracker(worker_id);
|
||||
ShenandoahTerminatorTerminator tt(_heap);
|
||||
@ -811,7 +807,6 @@ private:
|
||||
|
||||
template <class T>
|
||||
inline void do_oop_work(T* p) {
|
||||
ShenandoahEvacOOMScope evac_scope;
|
||||
_traversal_gc->process_oop<T, false /* string dedup */, false /* degen */, true /* atomic update */>(p, _thread, _queue, _mark_context);
|
||||
}
|
||||
|
||||
@ -834,7 +829,6 @@ private:
|
||||
|
||||
template <class T>
|
||||
inline void do_oop_work(T* p) {
|
||||
ShenandoahEvacOOMScope evac_scope;
|
||||
_traversal_gc->process_oop<T, false /* string dedup */, true /* degen */, false /* atomic update */>(p, _thread, _queue, _mark_context);
|
||||
}
|
||||
|
||||
@ -861,7 +855,6 @@ public:
|
||||
assert(worker_id == 0, "The code below is single-threaded, only one worker is expected");
|
||||
ShenandoahParallelWorkerSession worker_session(worker_id);
|
||||
ShenandoahSuspendibleThreadSetJoiner stsj(ShenandoahSuspendibleWorkers);
|
||||
ShenandoahEvacOOMScope oom_evac_scope;
|
||||
|
||||
ShenandoahHeap* sh = ShenandoahHeap::heap();
|
||||
|
||||
@ -968,7 +961,6 @@ public:
|
||||
assert(sh->process_references(), "why else would we be here?");
|
||||
shenandoah_assert_rp_isalive_installed();
|
||||
|
||||
ShenandoahEvacOOMScope evac_scope;
|
||||
traversal_gc->main_loop(_worker_id, _terminator, false);
|
||||
|
||||
if (_reset_terminator) {
|
||||
@ -1010,7 +1002,6 @@ public:
|
||||
}
|
||||
|
||||
void work(uint worker_id) {
|
||||
ShenandoahEvacOOMScope oom_evac_scope;
|
||||
assert(ShenandoahSafepoint::is_at_shenandoah_safepoint(), "Must be at a safepoint");
|
||||
ShenandoahHeap* heap = ShenandoahHeap::heap();
|
||||
ShenandoahTraversalDrainMarkingStackClosure complete_gc(worker_id, _terminator);
|
||||
|
||||
@ -51,6 +51,7 @@ void ShenandoahTraversalGC::process_oop(T* p, Thread* thread, ShenandoahObjToSca
|
||||
} else if (_heap->in_collection_set(obj)) {
|
||||
oop forw = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
|
||||
if (obj == forw) {
|
||||
ShenandoahEvacOOMScope evac_scope;
|
||||
forw = _heap->evacuate_object(obj, thread);
|
||||
}
|
||||
shenandoah_assert_forwarded_except(p, obj, _heap->cancelled_gc());
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user