保守運用機能のためのクラス (PerfData 管理用のクラス) (より正確には, そのための機能を納めた名前空間(AllStatic クラス)).
定期的に PerfData のデータを共有メモリ(hsperfdataファイル)に反映させるためのメソッドを格納している (See: here for details).
((cite: hotspot/src/share/vm/runtime/statSampler.hpp))
/*
* The StatSampler class is responsible for periodically updating
* sampled PerfData instances and writing the sampled values to the
* PerfData memory region.
*
* In addition it is also responsible for providing a home for
* PerfData instances that otherwise have no better home.
*/
class StatSampler : AllStatic {
以下の箇所で(のみ)使用されている.
Threads::create_vm() の内で StatSampler::engage() が呼ばれて処理が開始される.
((cite: hotspot/src/share/vm/runtime/thread.cpp))
jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) {
...
StatSampler::engage();
StatSamplerTask::task() で, 定期間隔で StatSampler::collect_sample() が呼ばれてファイルへの出力が行われる.
before_exit() の内で StatSampler::disengage() 及び StatSampler::destroy() が呼ばれて後片付けが行われる.
((cite: hotspot/src/share/vm/runtime/java.cpp))
void before_exit(JavaThread * thread) {
...
// shut down the StatSampler task
StatSampler::disengage();
StatSampler::destroy();
See: here for details
StatSampler クラス内で使用される補助クラス.
定期間隔で PerfData のデータを共有メモリ(hsperfdataファイル)に反映させるためのクラス(PeriodicTaskクラス).
((cite: hotspot/src/share/vm/runtime/statSampler.cpp))
// --------------------------------------------------------
// StatSamplerTask
class StatSamplerTask : public PeriodicTask {
StatSampler クラスの _task フィールド (static フィールド) に(のみ)格納されている.
StatSampler::engage() 内で(のみ)生成されている.
定期間隔で StatSampler::collect_sample() を呼び出しているだけ.
See: here for details
保守運用機能のためのクラス (PerfData による情報出力用のクラス).
os クラスが管理している経過時間情報 (os::elapsed_counter()) を PerfData から出力するための補助クラス(PerfSampleHelperクラス).
((cite: hotspot/src/share/vm/runtime/statSampler.cpp))
/*
* helper class to provide for sampling of the elapsed_counter value
* maintained in the OS class.
*/
class HighResTimeSampler : public PerfSampleHelper {
StatSampler::create_sampled_perfdata() 内で(のみ)生成されている. そして, この関数は現在は以下のパスで(のみ)呼び出されている.
(HotSpot の起動時処理) (See: here for details) -> Threads::create_vm() -> StatSampler::engage() -> StatSampler::initialize() -> StatSampler::create_misc_perfdata() -> StatSampler::create_sampled_perfdata()
"sun.os.hrt.ticks" という名前の PerfCounter を作る際に, コンストラクタ引数として渡される (これにより定期間隔で HighResTimeSampler::take_sample() が呼び出される) (See: StatSampler::create_sampled_perfdata()).
os::elapsed_counter() を呼び出すだけ.
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.