Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.hpp
38920 views
/*1* Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*22*/2324#ifndef SHARE_VM_GC_IMPLEMENTATION_PARNEW_PAROOPCLOSURES_HPP25#define SHARE_VM_GC_IMPLEMENTATION_PARNEW_PAROOPCLOSURES_HPP2627#include "memory/genOopClosures.hpp"28#include "memory/padded.hpp"2930// Closures for ParNewGeneration3132class ParScanThreadState;33class ParNewGeneration;34typedef Padded<OopTaskQueue> ObjToScanQueue;35typedef GenericTaskQueueSet<ObjToScanQueue, mtGC> ObjToScanQueueSet;36class ParallelTaskTerminator;3738class ParScanClosure: public OopsInKlassOrGenClosure {39protected:40ParScanThreadState* _par_scan_state;41ParNewGeneration* _g;42HeapWord* _boundary;43template <class T> void inline par_do_barrier(T* p);44template <class T> void inline do_oop_work(T* p,45bool gc_barrier,46bool root_scan);47public:48ParScanClosure(ParNewGeneration* g, ParScanThreadState* par_scan_state);49};5051class ParScanWithBarrierClosure: public ParScanClosure {52public:53ParScanWithBarrierClosure(ParNewGeneration* g,54ParScanThreadState* par_scan_state) :55ParScanClosure(g, par_scan_state) {}56virtual void do_oop(oop* p);57virtual void do_oop(narrowOop* p);58inline void do_oop_nv(oop* p);59inline void do_oop_nv(narrowOop* p);60};6162class ParScanWithoutBarrierClosure: public ParScanClosure {63public:64ParScanWithoutBarrierClosure(ParNewGeneration* g,65ParScanThreadState* par_scan_state) :66ParScanClosure(g, par_scan_state) {}67virtual void do_oop(oop* p);68virtual void do_oop(narrowOop* p);69inline void do_oop_nv(oop* p);70inline void do_oop_nv(narrowOop* p);71};7273class ParRootScanWithBarrierTwoGensClosure: public ParScanClosure {74public:75ParRootScanWithBarrierTwoGensClosure(ParNewGeneration* g,76ParScanThreadState* par_scan_state) :77ParScanClosure(g, par_scan_state) {}78virtual void do_oop(oop* p);79virtual void do_oop(narrowOop* p);80};8182class ParRootScanWithoutBarrierClosure: public ParScanClosure {83public:84ParRootScanWithoutBarrierClosure(ParNewGeneration* g,85ParScanThreadState* par_scan_state) :86ParScanClosure(g, par_scan_state) {}87virtual void do_oop(oop* p);88virtual void do_oop(narrowOop* p);89};9091class ParScanWeakRefClosure: public ScanWeakRefClosure {92protected:93ParScanThreadState* _par_scan_state;94template <class T> inline void do_oop_work(T* p);95public:96ParScanWeakRefClosure(ParNewGeneration* g,97ParScanThreadState* par_scan_state);98virtual void do_oop(oop* p);99virtual void do_oop(narrowOop* p);100inline void do_oop_nv(oop* p);101inline void do_oop_nv(narrowOop* p);102};103104class ParEvacuateFollowersClosure: public VoidClosure {105private:106ParScanThreadState* _par_scan_state;107ParScanThreadState* par_scan_state() { return _par_scan_state; }108109// We want to preserve the specific types here (rather than "OopClosure")110// for later de-virtualization of do_oop calls.111ParScanWithoutBarrierClosure* _to_space_closure;112ParScanWithoutBarrierClosure* to_space_closure() {113return _to_space_closure;114}115ParRootScanWithoutBarrierClosure* _to_space_root_closure;116ParRootScanWithoutBarrierClosure* to_space_root_closure() {117return _to_space_root_closure;118}119120ParScanWithBarrierClosure* _old_gen_closure;121ParScanWithBarrierClosure* old_gen_closure () {122return _old_gen_closure;123}124ParRootScanWithBarrierTwoGensClosure* _old_gen_root_closure;125ParRootScanWithBarrierTwoGensClosure* old_gen_root_closure () {126return _old_gen_root_closure;127}128129ParNewGeneration* _par_gen;130ParNewGeneration* par_gen() { return _par_gen; }131132ObjToScanQueueSet* _task_queues;133ObjToScanQueueSet* task_queues() { return _task_queues; }134135ParallelTaskTerminator* _terminator;136ParallelTaskTerminator* terminator() { return _terminator; }137public:138ParEvacuateFollowersClosure(139ParScanThreadState* par_scan_state_,140ParScanWithoutBarrierClosure* to_space_closure_,141ParScanWithBarrierClosure* old_gen_closure_,142ParRootScanWithoutBarrierClosure* to_space_root_closure_,143ParNewGeneration* par_gen_,144ParRootScanWithBarrierTwoGensClosure* old_gen_root_closure_,145ObjToScanQueueSet* task_queues_,146ParallelTaskTerminator* terminator_);147virtual void do_void();148};149150#endif // SHARE_VM_GC_IMPLEMENTATION_PARNEW_PAROOPCLOSURES_HPP151152153