これらは, ParallelScavengeHeap の Minor GC 処理 ("Parallel Scavenge" 処理) で使用される補助クラス (See: here and here for details).
ParallelScavengeHeap に対する Minor GC 処理で使用される補助クラス(GCTaskクラス).
strong roots から参照されているポインタに対して Scavenge 処理を行う (ただし, JavaThread と VMThread だけは ThreadRootsTask で処理する. このクラスはそれ以外の strong roots 用 (See: ThreadRootsTask)).
((cite: hotspot/src/share/vm/gc_implementation/parallelScavenge/psTasks.hpp))
// ScavengeRootsTask
//
// This task scans all the roots of a given type.
//
//
class ScavengeRootsTask : public GCTask {
PSScavenge::invoke_no_policy() 内で(のみ)使用されている (See: here for details).
このクラスが処理する strong roots には以下のような種別が存在する (要は「スレッドのスタック内以外の全て」ということだが...).
((cite: hotspot/src/share/vm/gc_implementation/parallelScavenge/psTasks.hpp))
enum RootType {
universe = 1,
jni_handles = 2,
threads = 3,
object_synchronizer = 4,
flat_profiler = 5,
system_dictionary = 6,
management = 7,
jvmti = 8,
code_cache = 9
};
See: here for details
ParallelScavengeHeap に対する Minor GC 処理で使用される補助クラス(GCTaskクラス).
strong roots から参照されているポインタに mark を付ける (ただし, このクラスが処理する strong roots は JavaThread と VMThread だけ. それ以外の strong roots は ScavengeRootsTask で処理する (See: ScavengeRootsTask)).
((cite: hotspot/src/share/vm/gc_implementation/parallelScavenge/psTasks.hpp))
// ThreadRootsTask
//
// This task scans the roots of a single thread. This task
// enables scanning of thread roots in parallel.
//
class ThreadRootsTask : public GCTask {
PSScavenge::invoke_no_policy() 内で(のみ)使用されている (See: here for details).
See: here for details
ParallelScavengeHeap に対する Minor GC 処理で使用される補助クラス(GCTaskクラス).
他の GCTaskThread の担当になっている scavenge 処理を奪ってきて実行するという GCTask. キューの最後にこの GCTask を ParallelGCThreads 分だけ入れておくことで, 先に処理が終わった GCTaskThread が他のスレッドの仕事を奪って負荷分散するようになる (この GCTask 自体は, 全ての GCTaskThread に仕事がなくなった時に終了する).
((cite: hotspot/src/share/vm/gc_implementation/parallelScavenge/psTasks.hpp))
// StealTask
//
// This task is used to distribute work to idle threads.
//
class StealTask : public GCTask {
PSScavenge::invoke_no_policy() 内で(のみ)使用されている (より正確には, PSScavenge::invoke_no_policy() 内と, そこから呼び出される PSRefProcTaskExecutor::execute(ProcessTask& task) 内で使用される補助クラス) (See: here for details).
See: here for details
ParallelScavengeHeap に対する Minor GC 処理で使用される補助クラス(GCTaskクラス).
Perm 領域から Young 領域を指しているポインタの Scavenge 処理を行う.
((cite: hotspot/src/share/vm/gc_implementation/parallelScavenge/psTasks.hpp))
// SerialOldToYoungRootsTask
//
// This task is used to scan for roots in the perm gen
class SerialOldToYoungRootsTask : public GCTask {
PSScavenge::invoke_no_policy() 内で(のみ)使用されている (See: here for details).
See: here for details
ParallelScavengeHeap に対する Minor GC 処理で使用される補助クラス(GCTaskクラス).
Old 領域から Young 領域を指しているポインタの Scavenge 処理を行う.
((cite: hotspot/src/share/vm/gc_implementation/parallelScavenge/psTasks.hpp))
// OldToYoungRootsTask
//
// This task is used to scan old to young roots in parallel
class OldToYoungRootsTask : public GCTask {
PSScavenge::invoke_no_policy() 内で(のみ)使用されている (See: here for details).
Old 領域は量が多いため, stripe_number という数字で Old 領域内を複数に分割し, 複数の GCTaskThread で並列処理できるようにしている.
((cite: hotspot/src/share/vm/gc_implementation/parallelScavenge/psTasks.hpp))
OldToYoungRootsTask(PSOldGen *gen, HeapWord* gen_top, uint stripe_number) :
_gen(gen), _gen_top(gen_top), _stripe_number(stripe_number) { }
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.