Up Top

Serviceability 機能 : HotSpot Monitoring and Management Interface (JMM) : 各種 Platform MXBean クラスの処理 : sun.management.GarbageCollectorImpl の通知機能


概要(Summary)

GarbageCollectorImpl は NotificationEmitter 機能を有している. これは GarbageCollectorImpl が MemoryManagerImpl のサブクラスであり, この MemoryManagerImpl が NotificationEmitterSupport のサブクラスであるため.

機能としては「GC 終了時に登録されているリスナーに通知を送る」というもの. 内部的には GCNotifier クラスと ServiceThread によって実現されている.

備考(Notes)

(なお, このメソッドは JSR-174 には存在しない Sun Microsystems の独自拡張機能)

処理の流れ (概要)(Execution Flows : Summary)

リスナーの登録処理の流れ

sun.management.GarbageCollectorImpl.addNotificationListener()
-> sun.management.NotificationEmitterSupport.addNotificationListener()
-> sun.management.GarbageCollectorImpl.setNotificationEnabled()
   -> Java_sun_management_GarbageCollectorImpl_setNotificationEnabled()
      -> jmm_SetGCNotificationEnabled()
         -> GCMemoryManager::set_notification_enabled()

リスナーへの通知送信処理の流れ

(1) 通知用のオブジェクトの作成と ServiceThread の起床処理

(GC 終了後に TraceMemoryManagerStats のデストラクタから呼び出される)

TraceMemoryManagerStats::~TraceMemoryManagerStats()
-> MemoryService::gc_end()
   -> GCMemoryManager::gc_end()
      (GCMemoryManager::is_notification_enabled() が true だと GCNotifier::pushNotification() が呼ばれる)
      -> GCNotifier::pushNotification()
         -> GCNotifier::addRequest()
            -> Monitor::notify_all()   (<= ServiceThread を起床させる)

(2) ServiceThread による GCNotifier の通知機能の呼び出し

ServiceThread::service_thread_entry()
-> GCNotifier::sendNotification()
   -> sun.management.GarbageCollectorImpl.createGCNotification()
      -> sun.management.NotificationEmitterSupport.sendNotification()

処理の流れ (詳細)(Execution Flows : Details)

sun.management.GarbageCollectorImpl.addNotificationListener()

See: here for details

sun.management.NotificationEmitterSupport.addNotificationListener()

(#Under Construction)

Java_sun_management_GarbageCollectorImpl_setNotificationEnabled()

See: here for details

jmm_SetGCNotificationEnabled()

See: here for details

GCMemoryManager::set_notification_enabled()

See: here for details

GCNotifier::pushNotification()

See: here for details

GCNotifier::addRequest()

See: here for details

GCNotifier::sendNotification()

See: here for details

sun.management.GarbageCollectorImpl.createGCNotification()

See: here for details

sun.management.NotificationEmitterSupport.sendNotification()

(#Under Construction)


This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.