Top


定義場所(file name)

hotspot/src/share/vm/services/management.cpp

説明(description)

(この関数は, 指定されたスレッドのスレッドダンプを取得するもの)

// Helper function to do thread dump for a specific list of threads

名前(function name)

static void do_thread_dump(ThreadDumpResult* dump_result,
                           typeArrayHandle ids_ah,  // array of thread ID (long[])
                           int num_threads,
                           int max_depth,
                           bool with_locked_monitors,
                           bool with_locked_synchronizers,
                           TRAPS) {

本体部(body)

  {- -------------------------------------------
  (1) まず, 指定されたスレッドの個数分の配列を用意し (以下の thread_handle_array), 
      そこに指定されたスレッドを表す java.lang.Thread オブジェクトを詰めておく.
      ---------------------------------------- -}

      // First get an array of threadObj handles.
      // A JavaThread may terminate before we get the stack trace.
      GrowableArray<instanceHandle>* thread_handle_array = new GrowableArray<instanceHandle>(num_threads);
      {
        MutexLockerEx ml(Threads_lock);
        for (int i = 0; i < num_threads; i++) {
          jlong tid = ids_ah->long_at(i);
          JavaThread* jt = find_java_thread_from_id(tid);
          oop thread_obj = (jt != NULL ? jt->threadObj() : (oop)NULL);
          instanceHandle threadObj_h(THREAD, (instanceOop) thread_obj);
          thread_handle_array->append(threadObj_h);
        }
      }

  {- -------------------------------------------
  (1) 上で作った java.lang.Thread 配列を引数として VM_ThreadDump を呼び出し, 
      対応するスレッドの現在の状態を取得する.
      ---------------------------------------- -}

      // Obtain thread dumps and thread snapshot information
      VM_ThreadDump op(dump_result,
                       thread_handle_array,
                       num_threads,
                       max_depth, /* stack depth */
                       with_locked_monitors,
                       with_locked_synchronizers);
      VMThread::execute(&op);
    }

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