--- old/src/hotspot/share/gc/z/zHeap.cpp 2020-08-11 10:12:15.562077612 +0800 +++ new/src/hotspot/share/gc/z/zHeap.cpp 2020-08-11 10:12:15.394078509 +0800 @@ -35,6 +35,7 @@ #include "gc/z/zRelocationSetSelector.inline.hpp" #include "gc/z/zResurrection.hpp" #include "gc/z/zStat.hpp" +#include "gc/z/zTask.hpp" #include "gc/z/zThread.inline.hpp" #include "gc/z/zVerify.hpp" #include "gc/z/zWorkers.inline.hpp" @@ -185,6 +186,26 @@ _workers.threads_do(tc); } +// Adapter class from AbstractGangTask to Ztask +class ZAbstractGangTaskAdapter : public ZTask { +private: + AbstractGangTask* _task; + +public: + ZAbstractGangTaskAdapter(AbstractGangTask* task) : + ZTask(task->name()), + _task(task) { } + + virtual void work() { + _task->work(ZThread::worker_id()); + } +}; + +void ZHeap::run_task(AbstractGangTask* task) { + ZAbstractGangTaskAdapter ztask(task); + _workers.run_parallel(&ztask); +} + void ZHeap::out_of_memory() { ResourceMark rm;