Top


定義場所(file name)

hotspot/src/share/vm/interpreter/interpreterRuntime.cpp

説明(description)

// Quicken instance-of and check-cast bytecodes

名前(function name)

IRT_ENTRY(void, InterpreterRuntime::quicken_io_cc(JavaThread* thread))

本体部(body)

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

      // Force resolving; quicken the bytecode
      int which = get_index_u2(thread, Bytecodes::_checkcast);
      constantPoolOop cpool = method(thread)->constants();

  {- -------------------------------------------
  (1) (コメントによると, 
      ここに来るのは (quicken されていないのを確認して) quicken しにくる時だけのはず.
      ただ, マルチスレッドなので並行して他のスレッドが quicken を行っている可能性はあり, 
      そのためここに来た時点では quicken されているかもしれない.
      とのこと)
      ---------------------------------------- -}

      // We'd expect to assert that we're only here to quicken bytecodes, but in a multithreaded
      // program we might have seen an unquick'd bytecode in the interpreter but have another
      // thread quicken the bytecode before we get here.
      // assert( cpool->tag_at(which).is_unresolved_klass(), "should only come here to quicken bytecodes" );

  {- -------------------------------------------
  (1) constantPoolOopDesc::klass_at() を呼んで, 対象のクラス(klassOop)を取得する.
        (この際, 対象クラスが constantPoolOopDesc 中でまだ解決されてなければ解決も行われる)
      ---------------------------------------- -}

      klassOop klass = cpool->klass_at(which, CHECK);

  {- -------------------------------------------
  (1) (取得した klassOop を返値として返したいので)
      引数で指定されたスレッドの vm_result フィールドに結果を格納しておく.
      ---------------------------------------- -}

      thread->set_vm_result(klass);
    IRT_END

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