これらは, Java ヒープ中の 「New 世代領域 (New Generation)」 を管理するためのクラス (See: here for details).
New Generation を管理するクラスは使用する GC アルゴリズムによって異なるが, これらのクラスは GC アルゴリズムが Serial GC の場合に使用される (つまり, ParallelScavenge でも G1GC でも ParNew でもない場合に使用される (See: PSYoungGen, YoungList, ParNewGeneration)).
GenCollectedHeap 使用時において, New Generation の管理を担当するクラスの 1つ (See: here for details).
このクラスは, GC アルゴリズムが ParNewGC ではない場合用 (つまり Serial GC 用) (See: ParNewGeneration).
((cite: hotspot/src/share/vm/memory/defNewGeneration.hpp))
// DefNewGeneration is a young generation containing eden, from- and
// to-space.
class DefNewGeneration: public Generation {
各 GenCollectedHeap オブジェクトの _gens フィールドに(のみ)格納されている.
(正確には, このフィールドは Generation のポインタの配列を格納するフィールド. この中に, その GenCollectedHeap 内で使用される全ての Generation オブジェクトが格納されている)
GenerationSpec::init() 内で(のみ)生成されている.
そして, この関数は現在は以下のパスで(のみ)呼び出されている.
(略) (See: here for details) -> GenCollectedHeap::initialize() -> GenerationSpec::init()
...
このクラスの DefNewGeneration::collect() メソッドが Serial GC 処理のエントリポイントになっている (See: here for details).
See: here for details
DefNewGeneration の GC 処理 (= Serial GC 処理) で使用される Closure クラス (See: here for details).
参照オブジェクト(java.lang.ref オブジェクト)の処理に用いられる Closure クラス. DefNewGeneration::IsAliveClosure::do_object_b() メソッドが呼ばれると, 処理対象のオブジェクトが生きているかどうかを返す.
((cite: hotspot/src/share/vm/memory/defNewGeneration.hpp))
class IsAliveClosure: public BoolObjectClosure {
DefNewGeneration::collect() 内で(のみ)使用されている (See: here for details).
See: here for details
DefNewGeneration の GC 処理 (= Serial GC 処理) で使用される Closure クラス (の基底クラス) (See: here for details).
参照オブジェクト(java.lang.ref オブジェクト)の処理に用いられる Closure クラス. まだコピーされていないオブジェクトに対して, コピー処理を行い, さらに元の場所にフォワーディングポインタを埋める処理を行う.
なお, このクラス自体は abstract class であり, 実際に使われるのはサブクラス (See: DefNewGeneration::FastKeepAliveClosure).
((cite: hotspot/src/share/vm/memory/defNewGeneration.hpp))
class KeepAliveClosure: public OopClosure {
呼び出されると, 引数で与えられた ScanWeakRefClosure を各オブジェクトに対して適用する (ついでに, 該当箇所の card の dirty 化処理も行っている) (See: ScanWeakRefClosure).
(なおこのクラスの場合, サブクラスである FastKeepAliveClosure とは異なり, 処理対象となった全ての oop に対して CardTableRS::inline_write_ref_field_gc() を呼び出す. (See: FastKeepAliveClosure))
See: here for details
DefNewGeneration の GC 処理 (= Serial GC 処理) で使用される Closure クラス (See: here for details).
DefNewGeneration::KeepAliveClosure クラスの具象サブクラス (= GC 時に参照オブジェクト(java.lang.ref オブジェクト)の処理に用いられる Closure. まだコピーされていないオブジェクトに対して, コピー処理を行い, さらに元の場所にフォワーディングポインタを埋める処理を行う).
((cite: hotspot/src/share/vm/memory/defNewGeneration.hpp))
class FastKeepAliveClosure: public KeepAliveClosure {
DefNewGeneration::collect() 内で(のみ)使用されている (See: here for details).
呼び出されると, 各オブジェクトに対して, 引数で与えられた ScanWeakRefClosure を適用する (ついでに, 該当箇所の card の dirty 化処理も行っている). (See: ScanWeakRefClosure)
(KeepAliveClosure とほぼ同じだが, このクラスの場合は DefNewGeneration 内を指しているポインタでなければ CardTableRS::inline_write_ref_field_gc() を呼び出さない. このため, KeepAliveClosure よりも高速.)
See: here for details
DefNewGeneration の GC 処理 (= Serial GC 処理) で使用される Closure クラス (See: here for details).
処理したオブジェクトから辿れる範囲全てについて再帰的に処理を行う.
((cite: hotspot/src/share/vm/memory/defNewGeneration.hpp))
class EvacuateFollowersClosure: public VoidClosure {
このクラスのインスタンス自体は, 現状はどこからも使われていない模様 (?? DefNewGeneration::FastEvacuateFollowersClosure があるから要らない?? #TODO).
See: here for details
DefNewGeneration の GC 処理 (= Serial GC 処理) で使用される Closure クラス (See: here for details).
処理したオブジェクトから辿れる範囲全てについて再帰的に処理を行う.
((cite: hotspot/src/share/vm/memory/defNewGeneration.hpp))
class FastEvacuateFollowersClosure: public VoidClosure {
DefNewGeneration::collect() 内で(のみ)使用されている (See: here for details).
(EvacuateFollowersClosure と何が違う?? 処理は実質的には同じように見える... #TODO)
See: here for details
DefNewGeneration の GC 処理 (= Serial GC 処理) で使用される Closure クラス (See: here for details).
GC 処理が失敗した際に, 各オブジェクトの mark フィールドを初期状態に戻すための Closure (GC 処理後には mark フィールドには forwarding pointer が埋められているため, それをクリアする).
((cite: hotspot/src/share/vm/memory/defNewGeneration.cpp))
class RemoveForwardPointerClosure: public ObjectClosure {
DefNewGeneration::remove_forwarding_pointers() 内で(のみ)使用されている (See: here for details).
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.