ParallelScavengeHeap の Minor GC 処理 ("Parallel Scavenge" 処理) で使用される補助クラス (See: here, here and here for details).
オブジェクトのコピー処理やポインタの再配置処理, 及びそれらを並列化するための機能を提供している.
((cite: hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp))
class PSPromotionManager : public CHeapObj {
なお, 各 PSPromotionManager オブジェクトはそれぞれ1つのスレッドからしか使用されない (そして, PSPromotionManager オブジェクト内にはスレッドローカルなデータしか含まない).
(誰かデストラクタを書いてくれ, みたいなことが書いてあったりもするが...)
((cite: hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp))
// psPromotionManager is used by a single thread to manage object survival
// during a scavenge. The promotion manager contains thread local data only.
//
// NOTE! Be carefull when allocating the stacks on cheap. If you are going
// to use a promotion manager in more than one thread, the stacks MUST be
// on cheap. This can lead to memory leaks, though, as they are not auto
// deallocated.
//
// FIX ME FIX ME Add a destructor, and don't rely on the user to drain/flush/deallocate!
PSPromotionManager オブジェクトの _manager_array フィールドに(のみ)格納されている. (正確には, このフィールドは PSPromotionManager の配列を格納するフィールド. この中に, 全 GCTaskThread 用の PSPromotionManager オブジェクトが格納されている)
((cite: hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp))
class PSPromotionManager : public CHeapObj {
...
static PSPromotionManager** _manager_array;
PSPromotionManager::initialize() 内で(のみ)生成されている.
See: here for details
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.