Mercurial > hg > truffle
diff src/share/vm/gc_implementation/parallelScavenge/psTasks.hpp @ 0:a61af66fc99e jdk7-b24
Initial load
author | duke |
---|---|
date | Sat, 01 Dec 2007 00:00:00 +0000 |
parents | |
children | 148e5441d916 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/gc_implementation/parallelScavenge/psTasks.hpp Sat Dec 01 00:00:00 2007 +0000 @@ -0,0 +1,145 @@ +/* + * Copyright 2002-2005 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + * + */ + +// +// psTasks.hpp is a collection of GCTasks used by the +// parallelScavenge collector. +// + +class GCTask; +class OopClosure; +class OopStack; +class ObjectStartArray; +class ParallelTaskTerminator; +class MutableSpace; +class PSOldGen; +class Thread; +class VMThread; + +// +// ScavengeRootsTask +// +// This task scans all the roots of a given type. +// +// + +class ScavengeRootsTask : public GCTask { + public: + enum RootType { + universe = 1, + jni_handles = 2, + threads = 3, + object_synchronizer = 4, + flat_profiler = 5, + system_dictionary = 6, + management = 7, + jvmti = 8 + }; + private: + RootType _root_type; + public: + ScavengeRootsTask(RootType value) : _root_type(value) {} + + char* name() { return (char *)"scavenge-roots-task"; } + + virtual void do_it(GCTaskManager* manager, uint which); +}; + +// +// ThreadRootsTask +// +// This task scans the roots of a single thread. This task +// enables scanning of thread roots in parallel. +// + +class ThreadRootsTask : public GCTask { + private: + JavaThread* _java_thread; + VMThread* _vm_thread; + public: + ThreadRootsTask(JavaThread* root) : _java_thread(root), _vm_thread(NULL) {} + ThreadRootsTask(VMThread* root) : _java_thread(NULL), _vm_thread(root) {} + + char* name() { return (char *)"thread-roots-task"; } + + virtual void do_it(GCTaskManager* manager, uint which); +}; + +// +// StealTask +// +// This task is used to distribute work to idle threads. +// + +class StealTask : public GCTask { + private: + ParallelTaskTerminator* const _terminator; + public: + char* name() { return (char *)"steal-task"; } + + StealTask(ParallelTaskTerminator* t); + + ParallelTaskTerminator* terminator() { return _terminator; } + + virtual void do_it(GCTaskManager* manager, uint which); +}; + +// +// SerialOldToYoungRootsTask +// +// This task is used to scan for roots in the perm gen + +class SerialOldToYoungRootsTask : public GCTask { + private: + PSOldGen* _gen; + HeapWord* _gen_top; + + public: + SerialOldToYoungRootsTask(PSOldGen *gen, HeapWord* gen_top) : + _gen(gen), _gen_top(gen_top) { } + + char* name() { return (char *)"serial-old-to-young-roots-task"; } + + virtual void do_it(GCTaskManager* manager, uint which); +}; + +// +// OldToYoungRootsTask +// +// This task is used to scan old to young roots in parallel + +class OldToYoungRootsTask : public GCTask { + private: + PSOldGen* _gen; + HeapWord* _gen_top; + uint _stripe_number; + + public: + OldToYoungRootsTask(PSOldGen *gen, HeapWord* gen_top, uint stripe_number) : + _gen(gen), _gen_top(gen_top), _stripe_number(stripe_number) { } + + char* name() { return (char *)"old-to-young-roots-task"; } + + virtual void do_it(GCTaskManager* manager, uint which); +};