Skip to content

Commit

Permalink
8256740: ZGC: Move closures out of zOopClosure files
Browse files Browse the repository at this point in the history
Reviewed-by: pliden
  • Loading branch information
stefank committed Nov 23, 2020
1 parent 659aec8 commit 1f32c11
Show file tree
Hide file tree
Showing 14 changed files with 101 additions and 175 deletions.
9 changes: 8 additions & 1 deletion src/hotspot/share/gc/z/zBarrier.cpp
Expand Up @@ -25,7 +25,6 @@
#include "gc/z/zBarrier.inline.hpp"
#include "gc/z/zHeap.inline.hpp"
#include "gc/z/zOop.inline.hpp"
#include "gc/z/zOopClosures.inline.hpp"
#include "memory/iterator.inline.hpp"
#include "oops/oop.inline.hpp"
#include "runtime/safepoint.hpp"
Expand Down Expand Up @@ -239,3 +238,11 @@ oop ZBarrier::weak_load_barrier_on_phantom_oop_field_preloaded(volatile narrowOo
ShouldNotReachHere();
return NULL;
}

void ZLoadBarrierOopClosure::do_oop(oop* p) {
ZBarrier::load_barrier_on_oop_field(p);
}

void ZLoadBarrierOopClosure::do_oop(narrowOop* p) {
ShouldNotReachHere();
}
7 changes: 7 additions & 0 deletions src/hotspot/share/gc/z/zBarrier.hpp
Expand Up @@ -25,6 +25,7 @@
#define SHARE_GC_Z_ZBARRIER_HPP

#include "memory/allocation.hpp"
#include "memory/iterator.hpp"
#include "oops/oop.hpp"

typedef bool (*ZBarrierFastPath)(uintptr_t);
Expand Down Expand Up @@ -122,4 +123,10 @@ class ZBarrier : public AllStatic {
static oop weak_load_barrier_on_phantom_oop_field_preloaded(volatile narrowOop* p, oop o);
};

class ZLoadBarrierOopClosure : public BasicOopIterateClosure {
public:
virtual void do_oop(oop* p);
virtual void do_oop(narrowOop* p);
};

#endif // SHARE_GC_Z_ZBARRIER_HPP
8 changes: 4 additions & 4 deletions src/hotspot/share/gc/z/zBarrierSetNMethod.cpp
Expand Up @@ -26,7 +26,6 @@
#include "gc/z/zBarrierSetNMethod.hpp"
#include "gc/z/zGlobals.hpp"
#include "gc/z/zLock.inline.hpp"
#include "gc/z/zOopClosures.hpp"
#include "gc/z/zNMethod.hpp"
#include "gc/z/zThreadLocalData.hpp"
#include "logging/log.hpp"
Expand All @@ -53,9 +52,10 @@ bool ZBarrierSetNMethod::nmethod_entry_barrier(nmethod* nm) {
return false;
}

// Heal oops and disarm
ZNMethodOopClosure cl;
ZNMethod::nmethod_oops_do_inner(nm, &cl);
// Heal oops
ZNMethod::nmethod_oops_barrier(nm);

// Disarm
disarm(nm);

return true;
Expand Down
24 changes: 23 additions & 1 deletion src/hotspot/share/gc/z/zMark.cpp
Expand Up @@ -22,17 +22,19 @@
*/

#include "precompiled.hpp"
#include "classfile/classLoaderData.hpp"
#include "classfile/classLoaderDataGraph.hpp"
#include "code/nmethod.hpp"
#include "gc/shared/suspendibleThreadSet.hpp"
#include "gc/z/zBarrier.inline.hpp"
#include "gc/z/zHeap.inline.hpp"
#include "gc/z/zLock.inline.hpp"
#include "gc/z/zMark.inline.hpp"
#include "gc/z/zMarkCache.inline.hpp"
#include "gc/z/zMarkStack.inline.hpp"
#include "gc/z/zMarkTerminate.inline.hpp"
#include "gc/z/zNMethod.hpp"
#include "gc/z/zOopClosures.inline.hpp"
#include "gc/z/zOop.inline.hpp"
#include "gc/z/zPage.hpp"
#include "gc/z/zPageTable.inline.hpp"
#include "gc/z/zRootsIterator.hpp"
Expand Down Expand Up @@ -236,6 +238,26 @@ void ZMark::follow_partial_array(ZMarkStackEntry entry, bool finalizable) {
follow_array(addr, size, finalizable);
}

template <bool finalizable>
class ZMarkBarrierOopClosure : public ClaimMetadataVisitingOopIterateClosure {
public:
ZMarkBarrierOopClosure() :
ClaimMetadataVisitingOopIterateClosure(finalizable
? ClassLoaderData::_claim_finalizable
: ClassLoaderData::_claim_strong,
finalizable
? NULL
: ZHeap::heap()->reference_discoverer()) {}

virtual void do_oop(oop* p) {
ZBarrier::mark_barrier_on_oop_field(p, finalizable);
}

virtual void do_oop(narrowOop* p) {
ShouldNotReachHere();
}
};

void ZMark::follow_array_object(objArrayOop obj, bool finalizable) {
if (finalizable) {
ZMarkBarrierOopClosure<true /* finalizable */> cl;
Expand Down
26 changes: 23 additions & 3 deletions src/hotspot/share/gc/z/zNMethod.cpp
Expand Up @@ -28,19 +28,20 @@
#include "gc/shared/barrierSet.hpp"
#include "gc/shared/barrierSetNMethod.hpp"
#include "gc/shared/suspendibleThreadSet.hpp"
#include "gc/z/zBarrier.inline.hpp"
#include "gc/z/zGlobals.hpp"
#include "gc/z/zLock.inline.hpp"
#include "gc/z/zNMethod.hpp"
#include "gc/z/zNMethodData.hpp"
#include "gc/z/zNMethodTable.hpp"
#include "gc/z/zOopClosures.inline.hpp"
#include "gc/z/zTask.hpp"
#include "gc/z/zWorkers.hpp"
#include "logging/log.hpp"
#include "memory/allocation.inline.hpp"
#include "memory/iterator.hpp"
#include "memory/resourceArea.hpp"
#include "memory/universe.hpp"
#include "oops/oop.inline.hpp"
#include "runtime/atomic.hpp"
#include "utilities/debug.hpp"

Expand Down Expand Up @@ -243,6 +244,26 @@ void ZNMethod::nmethod_oops_do_inner(nmethod* nm, OopClosure* cl) {
}
}

class ZNMethodOopClosure : public OopClosure {
public:
virtual void do_oop(oop* p) {
if (ZResurrection::is_blocked()) {
ZBarrier::keep_alive_barrier_on_phantom_root_oop_field(p);
} else {
ZBarrier::load_barrier_on_root_oop_field(p);
}
}

virtual void do_oop(narrowOop* p) {
ShouldNotReachHere();
}
};

void ZNMethod::nmethod_oops_barrier(nmethod* nm) {
ZNMethodOopClosure cl;
nmethod_oops_do_inner(nm, &cl);
}

void ZNMethod::nmethods_do_begin() {
ZNMethodTable::nmethods_do_begin();
}
Expand Down Expand Up @@ -307,8 +328,7 @@ class ZNMethodUnlinkClosure : public NMethodClosure {

if (ZNMethod::is_armed(nm)) {
// Heal oops and disarm
ZNMethodOopClosure cl;
ZNMethod::nmethod_oops_do(nm, &cl);
ZNMethod::nmethod_oops_barrier(nm);
ZNMethod::disarm(nm);
}

Expand Down
2 changes: 2 additions & 0 deletions src/hotspot/share/gc/z/zNMethod.hpp
Expand Up @@ -51,6 +51,8 @@ class ZNMethod : public AllStatic {
static void nmethod_oops_do(nmethod* nm, OopClosure* cl);
static void nmethod_oops_do_inner(nmethod* nm, OopClosure* cl);

static void nmethod_oops_barrier(nmethod* nm);

static void nmethods_do_begin();
static void nmethods_do_end();
static void nmethods_do(NMethodClosure* cl);
Expand Down
1 change: 0 additions & 1 deletion src/hotspot/share/gc/z/zNMethodTable.cpp
Expand Up @@ -34,7 +34,6 @@
#include "gc/z/zNMethodTable.hpp"
#include "gc/z/zNMethodTableEntry.hpp"
#include "gc/z/zNMethodTableIteration.hpp"
#include "gc/z/zOopClosures.inline.hpp"
#include "gc/z/zSafeDelete.inline.hpp"
#include "gc/z/zTask.hpp"
#include "gc/z/zWorkers.hpp"
Expand Down
61 changes: 0 additions & 61 deletions src/hotspot/share/gc/z/zOopClosures.hpp

This file was deleted.

99 changes: 0 additions & 99 deletions src/hotspot/share/gc/z/zOopClosures.inline.hpp

This file was deleted.

1 change: 0 additions & 1 deletion src/hotspot/share/gc/z/zReferenceProcessor.cpp
Expand Up @@ -26,7 +26,6 @@
#include "gc/shared/referencePolicy.hpp"
#include "gc/shared/referenceProcessorStats.hpp"
#include "gc/z/zHeap.inline.hpp"
#include "gc/z/zOopClosures.inline.hpp"
#include "gc/z/zReferenceProcessor.hpp"
#include "gc/z/zStat.hpp"
#include "gc/z/zTask.hpp"
Expand Down
1 change: 0 additions & 1 deletion src/hotspot/share/gc/z/zStackWatermark.cpp
Expand Up @@ -24,7 +24,6 @@
#include "precompiled.hpp"
#include "gc/z/zAddress.hpp"
#include "gc/z/zBarrier.inline.hpp"
#include "gc/z/zOopClosures.inline.hpp"
#include "gc/z/zStackWatermark.hpp"
#include "gc/z/zThread.inline.hpp"
#include "gc/z/zThreadLocalAllocBuffer.hpp"
Expand Down
2 changes: 1 addition & 1 deletion src/hotspot/share/gc/z/zStackWatermark.hpp
Expand Up @@ -27,7 +27,7 @@
#include "gc/shared/barrierSet.hpp"
#include "gc/shared/barrierSetNMethod.hpp"
#include "gc/shared/threadLocalAllocBuffer.hpp"
#include "gc/z/zOopClosures.hpp"
#include "gc/z/zBarrier.hpp"
#include "memory/allocation.hpp"
#include "memory/iterator.hpp"
#include "oops/oopsHierarchy.hpp"
Expand Down
9 changes: 8 additions & 1 deletion src/hotspot/share/gc/z/zUnload.cpp
Expand Up @@ -29,16 +29,23 @@
#include "code/dependencyContext.hpp"
#include "gc/shared/gcBehaviours.hpp"
#include "gc/shared/suspendibleThreadSet.hpp"
#include "gc/z/zBarrier.inline.hpp"
#include "gc/z/zLock.inline.hpp"
#include "gc/z/zNMethod.hpp"
#include "gc/z/zOopClosures.inline.hpp"
#include "gc/z/zStat.hpp"
#include "gc/z/zUnload.hpp"
#include "oops/access.inline.hpp"

static const ZStatSubPhase ZSubPhaseConcurrentClassesUnlink("Concurrent Classes Unlink");
static const ZStatSubPhase ZSubPhaseConcurrentClassesPurge("Concurrent Classes Purge");

class ZPhantomIsAliveObjectClosure : public BoolObjectClosure {
public:
virtual bool do_object_b(oop o) {
return ZBarrier::is_alive_barrier_on_phantom_oop(o);
}
};

class ZIsUnloadingOopClosure : public OopClosure {
private:
ZPhantomIsAliveObjectClosure _is_alive;
Expand Down

1 comment on commit 1f32c11

@openjdk-notifier
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.