Top

BCEscapeAnalyzer クラス (BCEscapeAnalyzer, 及びその補助クラス(BCEscapeAnalyzer::ArgumentMap, BCEscapeAnalyzer::StateInfo))

クラス一覧(class list)


BCEscapeAnalyzer

概要(Summary)

C2 JIT Compiler 用の補助クラス (#ifdef COMPILER2 時にしか定義されない).

エスケープ解析(Escape Analysis)中に使用される一時オブジェクト(ResourceObjクラス).

呼び出し先が分かっている(= 動的ディスパッチが不要な)メソッド呼び出し箇所について, その引数や返値についてのエスケープ解析を行うクラス.

    ((cite: hotspot/src/share/vm/ci/bcEscapeAnalyzer.hpp))
    // This class implements a fast, conservative analysis of effect of methods
    // on the escape state of their arguments.  The analysis is at the bytecode
    // level.
    ((cite: hotspot/src/share/vm/ci/bcEscapeAnalyzer.hpp))
    class BCEscapeAnalyzer : public ResourceObj {

使われ方(Usage)

使用方法の概要(how to use)

  1. ciMethod::get_bcea() で, そのメソッドに対応する BCEscapeAnalyzer オブジェクトを取得する.

  2. 以下のメソッドで, 引数や返値についてのエスケープ解析結果が得られる.

    ((cite: hotspot/src/share/vm/ci/bcEscapeAnalyzer.hpp))
      // The given argument does not escape the callee.
      bool is_arg_local(int i) const {
    ((cite: hotspot/src/share/vm/ci/bcEscapeAnalyzer.hpp))
      // The given argument escapes the callee, but does not become globally
      // reachable.
      bool is_arg_stack(int i) const {
    ((cite: hotspot/src/share/vm/ci/bcEscapeAnalyzer.hpp))
      // The given argument does not escape globally, and may be returned.
      bool is_arg_returned(int i) const {
    ((cite: hotspot/src/share/vm/ci/bcEscapeAnalyzer.hpp))
      // True iff only input arguments are returned.
      bool is_return_local() const {
    ((cite: hotspot/src/share/vm/ci/bcEscapeAnalyzer.hpp))
      // True iff only newly allocated unescaped objects are returned.
      bool is_return_allocated() const {
  1. また以下のメソッドで, 使用された依存性情報を表す Dependencies オブジェクトを取得できる.
    ((cite: hotspot/src/share/vm/ci/bcEscapeAnalyzer.hpp))
      // Copy dependencies from this analysis into "deps"
      void copy_dependencies(Dependencies *deps);

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

各 ciMethod オブジェクトの _bcea フィールドに(のみ)格納されている.

(ただし, BCEscapeAnalyzer オブジェクトの生成自体は実際に必要になるまで遅延されている)

(なお, ResourceObjクラスなので一時的なオブジェクト)

生成箇所(where its instances are created)

ciMethod::get_bcea() 内で(のみ)生成されている (= 初めて使用される時まで生成が遅延されている).

使用箇所(where its instances are used)

以下の箇所で(のみ)使用されている.

詳細(Details)

See: here for details


BCEscapeAnalyzer::ArgumentMap

概要(Summary)

BCEscapeAnalyzer クラス内で使用される補助クラス.

各局所変数やオペランドスタック中の各スロットについて, その位置にどの引数の値が格納されうるかを記録しておくためのクラス.

1つの BCEscapeAnalyzer::ArgumentMap オブジェクトが 1つの局所変数または 1つのオペランドスタック中のスロットに対応する.

    ((cite: hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp))
    // Maintain a map of which aguments a local variable or
    // stack slot may contain.  In addition to tracking
    // arguments, it tracks two special values, "allocated"
    // which represents any object allocated in the current
    // method, and "unknown" which is any other object.
    // Up to 30 arguments are handled, with the last one
    // representing summary information for any extra arguments
    class BCEscapeAnalyzer::ArgumentMap {

使われ方(Usage)

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

以下の箇所に(のみ)格納されている.

(正確には, このフィールドは BCEscapeAnalyzer::ArgumentMap の配列を格納するフィールド. この中に, 局所変数に対応する全ての BCEscapeAnalyzer::ArgumentMap オブジェクトが格納されている)

(正確には, このフィールドは BCEscapeAnalyzer::ArgumentMap の配列を格納するフィールド. この中に, オペランドスタック中のスロットに対応する全ての BCEscapeAnalyzer::ArgumentMap オブジェクトが格納されている)

生成箇所(where its instances are created)

以下の箇所で(のみ)生成されている.

Arena::Amalloc() で BCEscapeAnalyzer::StateInfo の配列が確保される (ただし, Arena::Amalloc() なので一時的なオブジェクト)

内部構造(Internal structure)

なお, operator= がオーバーライドされている (このため StateInfo::raw_push() した結果はコピーされることに注意).

    ((cite: hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp))
      void operator=(const ArgumentMap &am) { _bits = am._bits; }

詳細(Details)

See: here for details


BCEscapeAnalyzer::StateInfo

概要(Summary)

BCEscapeAnalyzer クラス内で使用される補助クラス.

各基本ブロックの先頭における局所変数/オペランドスタックの状態を示す.

    ((cite: hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp))
    class BCEscapeAnalyzer::StateInfo {

使われ方(Usage)

生成箇所(where its instances are created)

BCEscapeAnalyzer::iterate_blocks() 内で(のみ)生成されている.

(なお, 局所変数として生成されているほか, Arena::Amalloc() で BCEscapeAnalyzer::StateInfo の配列も確保されている. ただし, Arena::Amalloc() なので一時的なオブジェクト)

詳細(Details)

See: here for details



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