Top

ServiceThread クラス


ServiceThread

概要(Summary)

保守運用機能のためのクラス (JVMTI 機能及び JMM 機能用のクラス).

JVMTI/JMM のいくつかの種類のイベントについて, 対応するコールバック関数を呼び出すためのスレッドクラス. より具体的に言うと, 以下のイベント通知で使用される.

    ((cite: hotspot/src/share/vm/runtime/serviceThread.hpp))
    // A JavaThread for low memory detection support and JVMTI
    // compiled-method-load events.
    class ServiceThread : public JavaThread {

使われ方(Usage)

インスタンスの格納場所(where its instances are stored)

以下の箇所に(のみ)格納されている. ただし, このクラスのインスタンス自体は1つしか存在しない (どちらも同じインスタンスを指している).

(正確には, このフィールドは JavaThread の線形リストを格納するフィールド. JavaThread オブジェクトは _next フィールドで次の JavaThread オブジェクトを指せる構造になっている. 生成した JavaThread オブジェクトは全てこの線形リスト内に格納されている)

(なお, この線形リストには Threads::add() で登録される)

生成箇所(where its instances are created)

ServiceThread::initialize() 内で(のみ)生成されている. そして, この関数は現在は以下のパスで(のみ)呼び出されている.

(HotSpot の起動時処理) (See: here for details)
-> Threads::create_vm()
   -> Management::initialize()
      -> ServiceThread::initialize()

内部構造(Internal structure)

生成された ServiceThread スレッドの処理のエントリポイントは ServiceThread::service_thread_entry(). この中では以下の処理を無限ループで繰り返すだけ.

  1. Service_lock ロックに対して wait() して眠りに入る.
  2. 対応するイベントが発生したら (その発生源が Service_lock に notify かけてくれるので) 起き出して処理を行う.

なお 2. における各イベントの処理内容は以下の通り.

参考(for your information): ServiceThread::service_thread_entry()

See: here for details

詳細(Details)

See: here for details



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