Top


定義場所(file name)

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

名前(function name)

void ThreadTimesClosure::do_thread(Thread* thread) {

本体部(body)

  {- -------------------------------------------
  (1) (変数宣言など)
      ---------------------------------------- -}

      Handle s;

  {- -------------------------------------------
  (1) (assert)
      ---------------------------------------- -}

      assert(thread != NULL, "thread was NULL");

  {- -------------------------------------------
  (1) もし処理対象が JavaThread ではなかったり, 
      HotSpot が内部的に使用するスレッドだった場合は, 
      特にすることはないので, ここでリターン.
      ---------------------------------------- -}

      // exclude externally visible JavaThreads
      if (thread->is_Java_thread() && !thread->is_hidden_from_external_view()) {
        return;
      }

  {- -------------------------------------------
  (1) 結果を格納するための配列(コンストラクタ引数で渡されていた配列)に
      空き領域がなくなってしまっていたら, 
      もうこれ以上の値は格納できないので, ここでリターン.
      ---------------------------------------- -}

      if (_count >= _names_len || _count >= _times_len) {
        // skip if the result array is not big enough
        return;
      }

  {- -------------------------------------------
  (1) EXCEPTION_MARK (See: ExceptionMark)
      ---------------------------------------- -}

      EXCEPTION_MARK;

  {- -------------------------------------------
  (1) 結果を格納するための配列(_names, _times)に
      それぞれ処理対象のスレッドの名前, 及びそのスレッドの CPU 使用時間を格納する.
      また, _count フィールドの値(= 処理したスレッド数を示す数値)もインクリメントしておく.
      ---------------------------------------- -}

      assert(thread->name() != NULL, "All threads should have a name");
      s = java_lang_String::create_from_str(thread->name(), CHECK);
      _names->obj_at_put(_count, s());

      _times->long_at_put(_count, os::is_thread_cpu_time_supported() ?
                            os::thread_cpu_time(thread) : -1);
      _count++;
    }

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