これらは, Platform MXBean 機能のためのクラス. より具体的に言うと, java.lang.management.MemoryPoolMXBean.setUsageThreshold() メソッド, 及び java.lang.management.MemoryPoolMXBean.setCollectionUsageThreshold() メソッドの実装を担当するクラス. (See: here for details) (See: here for details)
java.lang.management.MemoryPoolMXBean.setUsageThreshold() メソッド, 及び java.lang.management.MemoryPoolMXBean.setCollectionUsageThreshold() メソッドで指定する threshold 値は 0 より大きな値でなければならない. これを利用して, 特殊な内部状態を以下のようにエンコードしている.
なお, それぞれの MemoryPool に対する threshold のデフォルト値は以下の通り.
MemoryPool | threshold |
---|---|
Eden space | -1 |
Survivor space 1 | -1 |
Survivor space 2 | -1 |
Old generation | 0 |
Perm generation | 0 |
CodeCache | 0 |
閾値を超過したかどうかのチェックは以下のタイミングで行われる.
なお, この機能は ServiceThread と連携して動作する (See: ServiceThread).
((cite: hotspot/src/share/vm/services/lowMemoryDetector.hpp))
// Low Memory Detection Support
// Two memory alarms in the JDK (we called them sensors).
// - Heap memory sensor
// - Non-heap memory sensor
// When the VM detects if the memory usage of a memory pool has reached
// or exceeded its threshold, it will trigger the sensor for the type
// of the memory pool (heap or nonheap or both).
//
// If threshold == -1, no low memory detection is supported and
// the threshold value is not allowed to be changed.
// If threshold == 0, no low memory detection is performed for
// that memory pool. The threshold can be set to any non-negative
// value.
//
// The default threshold of the Hotspot memory pools are:
// Eden space -1
// Survivor space 1 -1
// Survivor space 2 -1
// Old generation 0
// Perm generation 0
// CodeCache 0
//
// For heap memory, detection will be performed when GC finishes
// and also in the slow path allocation.
// For Code cache, detection will be performed in the allocation
// and deallocation.
//
// May need to deal with hysteresis effect.
//
// Memory detection code runs in the Service thread (serviceThread.hpp).
保守運用機能のためのクラス (関連する JMM 用の Java クラスからのみ使用される) (See: java.lang.management.MemoryPoolMXBean) (See: here for details)
メモリ使用量に関する閾値超過検出処理用の関数を納めた名前空間(AllStatic クラス).
((cite: hotspot/src/share/vm/services/lowMemoryDetector.hpp))
class LowMemoryDetector : public AllStatic {
java.lang.management.MemoryPoolMXBean.setUsageThreshold() メソッド, 及び java.lang.management.MemoryPoolMXBean.setCollectionUsageThreshold() メソッドの処理で(のみ)使用されている.
See: here for details
LowMemoryDetector クラス内で使用される補助クラス.
各 MemoryPool オブジェクトの閾値情報を記録しておくためのクラス.
((cite: hotspot/src/share/vm/services/lowMemoryDetector.hpp))
class ThresholdSupport : public CHeapObj {
MemoryPool オブジェクトの _usage_threshold フィールドおよび _gc_usage_threshold フィールドに(のみ)格納されている (それぞれ, setUsageThreshold() メソッド用と setCollectionUsageThreshold() メソッド用).
((cite: hotspot/src/share/vm/services/memoryPool.hpp))
class MemoryPool : public CHeapObj {
...
ThresholdSupport* _usage_threshold;
ThresholdSupport* _gc_usage_threshold;
See: here for details
LowMemoryDetector クラス内で使用される補助クラス.
sun.management.Sensor クラスを実現するためのクラス. Sensor オブジェクトに設定する値を HotSpot 内で記録しておくために使われる.
((cite: hotspot/src/share/vm/services/lowMemoryDetector.hpp))
class SensorInfo : public CHeapObj {
MemoryPool オブジェクトの _usage_sensor フィールドおよび _gc_usage_sensor フィールドに(のみ)格納されている (それぞれ, setUsageThreshold() メソッド用と setCollectionUsageThreshold() メソッド用).
((cite: hotspot/src/share/vm/services/memoryPool.hpp))
class MemoryPool : public CHeapObj {
...
SensorInfo* _usage_sensor;
SensorInfo* _gc_usage_sensor;
See: here for details
?? (使われていないクラス)
ソースコード中のあるスコープの間だけ, LowMemoryDetector の機能を無効にするためのクラス(StackObjクラス).
((cite: hotspot/src/share/vm/services/lowMemoryDetector.hpp))
class LowMemoryDetectorDisabler: public StackObj {
(現状では使われていない)
コンストラクタで LowMemoryDetector::disable() を呼び出し, デストラクタで LowMemoryDetector::enable() を呼び出すだけ.
((cite: hotspot/src/share/vm/services/lowMemoryDetector.hpp))
LowMemoryDetectorDisabler()
{
LowMemoryDetector::disable();
}
~LowMemoryDetectorDisabler()
{
assert(LowMemoryDetector::temporary_disabled(), "should be disabled!");
LowMemoryDetector::enable();
}
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.