これらは, Java ヒープ中の「Perm 世代領域 (Perm Generation)」 を管理するためのクラス.
(なお Perm Generation とは, 主にクラスデータを格納するためのメモリ領域)
Perm Generation を管理するクラスは使用する GC アルゴリズムによって異なるが, これらのクラスは GC アルゴリズムが ParallelScavenge でも CMS でもない場合に使用される (See: PSPermGen, CMSPermGenGen) (See: here for details).
(なおコメントによると, Perm Generation は普通の Generation に少し似ているが違う点もあるので別扱いとしている, とのこと) (ところで, このコメントは permGen.hpp に書かれている内容と全く同じ...??)
((cite: hotspot/src/share/vm/memory/compactingPermGenGen.hpp))
// All heaps contains a "permanent generation," containing permanent
// (reflective) objects. This is like a regular generation in some ways,
// but unlike one in others, and so is split apart.
Perm 領域を表す Generation クラスの1つ. (See: here for details).
なお, このクラスは CompactingPermGen クラスとセットで使用される (このため, 「CompactingPermGen を Generation として扱うためのラッパークラス」とも言える. (See: CompactingPermGen)).
なお, CDS に関する扱い方は少しトリッキーなので注意, とのこと.
((cite: hotspot/src/share/vm/memory/compactingPermGenGen.hpp))
// This is the "generation" view of a CompactingPermGen.
// NOTE: the shared spaces used for CDS are here handled in
// a somewhat awkward and potentially buggy fashion, see CR 6801625.
// This infelicity should be fixed, see CR 6897789.
class CompactingPermGenGen: public OneContigSpaceCardGeneration {
各 CompactingPermGen オブジェクトの _gen フィールド内に(のみ)格納されている.
((cite: hotspot/src/share/vm/memory/compactPermGen.hpp))
// The "generation" view.
OneContigSpaceCardGeneration* _gen;
CompactingPermGen::CompactingPermGen() 内で(のみ)生成されている (See: here and here for details).
See: here for details
CompactingPermGenGen の GC 処理で使用される補助クラス.
コンパクション処理時に Perm 領域にある live object 内のポインタを新しいアドレスに修正するための Closure.
(なお, このクラスは JVMTI の RedefineClasses() が呼ばれていた場合に(のみ)使用される)
(なお, コメントでは "Recursively" と書いてあるが, 実際の処理は recursive になっていないような... というか, recursive な処理は RecursiveAdjustSharedObjectClosure の担当のような気もするが... #TODO)
((cite: hotspot/src/share/vm/memory/compactingPermGenGen.cpp))
// An ObjectClosure helper: Recursively adjust all pointers in an object
// and all objects by referenced it. Clear marks on objects in order to
// prevent visiting any object twice. This helper is used when the
// RedefineClasses() API has been called.
class AdjustSharedObjectClosure : public ObjectClosure {
CompactingPermGenGen::pre_adjust_pointers() の中で(のみ)使用されている
(なお, この関数は G1GC の場合には呼び出されていないため, 現状では GenCollectedHeap の場合専用のクラスである模様) (See: here for details).
See: here for details
CompactingPermGenGen の GC 処理で使用される補助クラス.
コンパクション処理時に Perm 領域にある live object 内のポインタを再帰的に新しいアドレスに修正するための Closure.
((cite: hotspot/src/share/vm/memory/compactingPermGenGen.cpp))
// An OopClosure helper: Recursively adjust all pointers in an object
// and all objects by referenced it. Clear marks on objects in order
// to prevent visiting any object twice.
class RecursiveAdjustSharedObjectClosure : public OopClosure {
CompactingPermGenGen::pre_adjust_pointers() の中で(のみ)使用されている
(なお, この関数は G1GC の場合には呼び出されていないため, 現状では GenCollectedHeap の場合専用のクラスである模様) (See: here for details).
(CompactingPermGenGen::pre_adjust_pointers() 内で直接使用されているほか, その中で呼び出される TraversePlaceholdersClosure::placeholders_do() の中でも使用されている.)
See: here for details
CompactingPermGenGen の GC 処理で使用される補助クラス.
コンパクション処理時に SystemDictionary の PlaceholderTable 内にあるポインタを再帰的に新しいアドレスに修正するための Closure.
((cite: hotspot/src/share/vm/memory/compactingPermGenGen.cpp))
// We need to go through all placeholders in the system dictionary and
// try to resolve them into shared classes. Other threads might be in
// the process of loading a shared class and have strong roots on
// their stack to the class without having added the class to the
// dictionary yet. This means the class will be marked during phase 1
// but will not be unmarked during the application of the
// RecursiveAdjustSharedObjectClosure to the SystemDictionary.
class TraversePlaceholdersClosure {
CompactingPermGenGen::pre_adjust_pointers() の中で(のみ)使用されている
(なお, この関数は G1GC の場合には呼び出されていないため, 現状では GenCollectedHeap の場合専用のクラスである模様) (See: here for details).
See: here for details
デバッグ用(開発時用)のクラス (#ifdef ASSERT 時にしか定義されない).
CDS 使用時に, GC 終了後には shared space 内のオブジェクトに mark が付いていないことをチェックする Closure.
((cite: hotspot/src/share/vm/memory/compactingPermGenGen.cpp))
#ifdef ASSERT
class VerifyMarksClearedClosure : public ObjectClosure {
CompactingPermGenGen::post_compact() 内で(のみ)使用されている
(なお, この関数は G1GC の場合には呼び出されていないため, 現状では GenCollectedHeap の場合専用のクラスである模様) (See: here for details).
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.