Top

Bytecode クラス関連のクラス (Bytecode, LookupswitchPair, Bytecode_lookupswitch, Bytecode_tableswitch, Bytecode_member_ref, Bytecode_invoke, Bytecode_field, Bytecode_checkcast, Bytecode_instanceof, Bytecode_new, Bytecode_multianewarray, Bytecode_anewarray, Bytecode_loadconstant)

これらは, メソッド中の各バイトコード命令の情報にアクセスするためのユーティリティ・クラス.

概要(Summary)

これらは, バイトコード情報を用いた作業中に使用されるユーティリティ・クラス.

例えば, bytecode 中から指定したオペランドを取り出すメソッド(Bytecode::get_index_u1(), Bytecode::get_index_u2(), etc)や, 指定の bytecode の命令長を取得するメソッド(Bytecode::instruction_size()) 等が用意されている.

また, Bytecode クラスのサブクラス (Bytecode_lookupswitch, Bytecode_tableswitch, Bytecode_member_ref, etc) では, それぞれの命令のオペランドに特化した取得メソッドが提供されている.

例: lookupswitch 命令の場合 (デフォルトのオフセット, ペア数, n 番目のペア, 等の情報を取得するメソッドが用意されている)

    ((cite: hotspot/src/share/vm/interpreter/bytecode.hpp))
      // Attributes
      int  default_offset() const                    { return get_Java_u4_at(aligned_offset(1 + 0*jintSize)); }
      int  number_of_pairs() const                   { return get_Java_u4_at(aligned_offset(1 + 1*jintSize)); }
      LookupswitchPair pair_at(int i) const          {
        assert(0 <= i && i < number_of_pairs(), "pair index out of bounds");
        return LookupswitchPair(aligned_addr_at(1 + (1 + i)*2*jintSize));
      }

クラス一覧(class list)


Bytecode

概要(Summary)

メソッド中の各バイトコード命令の情報にアクセスするためのユーティリティ・クラス(StackObjクラス)の基底クラス.

なお, このクラスは abstract class ではない (ただし StackObj クラスというよりは ValueObj クラスに近い使われ方をしている).

    ((cite: hotspot/src/share/vm/interpreter/bytecode.hpp))
    // The base class for different kinds of bytecode abstractions.
    // Provides the primitive operations to manipulate code relative
    // to the bcp.

    class Bytecode: public StackObj {

使われ方(Usage)

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

使う際には, 操作対象としたい bytecode 命令の bcp をコンストラクタに指定してインスタンスを生成する模様 (bcp の指定には, methodOop と address を使用).

    ((cite: hotspot/src/share/vm/interpreter/bytecode.hpp))
      Bytecode(methodOop method, address bcp): _bcp(bcp), _code(Bytecodes::code_at(method, addr_at(0))) {
        assert(method != NULL, "this form requires a valid methodOop");
      }

生成箇所(where its instances are created)

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

詳細(Details)

See: here for details


Bytecode_lookupswitch

概要(Summary)

lookupswitch 命令用の Bytecode クラス.

    ((cite: hotspot/src/share/vm/interpreter/bytecode.hpp))
    class Bytecode_lookupswitch: public Bytecode {

詳細(Details)

See: here for details


LookupswitchPair

概要(Summary)

lookupswitch 命令中の match-offset pair オペランドを表すクラス. 1つの LookupswitchPair オブジェクトが 1つの match-offset pair (1 組の match-offset からなる 8byte の情報) に対応する.

(match-offset pair の情報を取得するための LookupswitchPair::match() メソッド, 及び LookupswitchPair::offset() メソッドを備える)

    ((cite: hotspot/src/share/vm/interpreter/bytecode.hpp))
    // Abstractions for lookupswitch bytecode
    class LookupswitchPair VALUE_OBJ_CLASS_SPEC {

使われ方(Usage)

Bytecode_lookupswitch::pair_at() で生成される (他に生成箇所はあるか?? #TODO).

詳細(Details)

See: here for details


Bytecode_tableswitch

概要(Summary)

tableswitch 命令用の Bytecode クラス.

    ((cite: hotspot/src/share/vm/interpreter/bytecode.hpp))
    class Bytecode_tableswitch: public Bytecode {

詳細(Details)

See: here for details


Bytecode_member_ref

概要(Summary)

メソッド呼び出し用のバイトコード, およびフィールドアクセス用のバイトコードを表す Bytecode クラスの基底クラス.

なお, このクラス自体は abstract class であり, 実際に使われるのはサブクラス.

    ((cite: hotspot/src/share/vm/interpreter/bytecode.hpp))
    // Common code for decoding invokes and field references.

    class Bytecode_member_ref: public Bytecode {

詳細(Details)

See: here for details


Bytecode_invoke

概要(Summary)

メソッド呼び出しに関するバイトコード命令 (invoke{virtual|static|interface|special}) 用の Bytecode クラス.

    ((cite: hotspot/src/share/vm/interpreter/bytecode.hpp))
    // Abstraction for invoke_{virtual, static, interface, special}

    class Bytecode_invoke: public Bytecode_member_ref {

詳細(Details)

See: here for details


Bytecode_field

概要(Summary)

フィールドアクセスに関するバイトコード命令 ((put|get}{field|static}) 用の Bytecode クラス.

    ((cite: hotspot/src/share/vm/interpreter/bytecode.hpp))
    // Abstraction for all field accesses (put/get field/static)
    class Bytecode_field: public Bytecode_member_ref {

詳細(Details)

See: here for details


Bytecode_checkcast

概要(Summary)

checkcast 命令用の Bytecode クラス.

    ((cite: hotspot/src/share/vm/interpreter/bytecode.hpp))
    // Abstraction for checkcast
    class Bytecode_checkcast: public Bytecode {

詳細(Details)

See: here for details


Bytecode_instanceof

概要(Summary)

instanceof 命令用の Bytecode クラス.

    ((cite: hotspot/src/share/vm/interpreter/bytecode.hpp))
    // Abstraction for instanceof
    class Bytecode_instanceof: public Bytecode {

詳細(Details)

See: here for details


Bytecode_new

概要(Summary)

new 命令用の Bytecode クラス.

    ((cite: hotspot/src/share/vm/interpreter/bytecode.hpp))
    class Bytecode_new: public Bytecode {

詳細(Details)

See: here for details


Bytecode_multianewarray

概要(Summary)

multianewarray 命令用の Bytecode クラス.

    ((cite: hotspot/src/share/vm/interpreter/bytecode.hpp))
    class Bytecode_multianewarray: public Bytecode {

詳細(Details)

See: here for details


Bytecode_anewarray

概要(Summary)

anewarray 命令用の Bytecode クラス.

    ((cite: hotspot/src/share/vm/interpreter/bytecode.hpp))
    class Bytecode_anewarray: public Bytecode {

詳細(Details)

See: here for details


Bytecode_loadconstant

概要(Summary)

ldc, ldc_w 及び ldc2_w 命令用の Bytecode クラス.

    ((cite: hotspot/src/share/vm/interpreter/bytecode.hpp))
    // Abstraction for ldc, ldc_w and ldc2_w
    class Bytecode_loadconstant: public Bytecode {

詳細(Details)

See: here for details



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