これらは, メソッド中の各バイトコード命令の情報にアクセスするためのユーティリティ・クラス.
これらのクラスは, 指定した範囲の bytecode に対して iterate 処理を行うためのイテレータクラス.
利用する際には, 以下のコメント中の "Usage:" のように使う.
((cite: hotspot/src/share/vm/interpreter/bytecodeStream.hpp))
// A BytecodeStream is used for fast iteration over the bytecodes
// of a methodOop.
//
// Usage:
//
// BytecodeStream s(method);
// Bytecodes::Code c;
// while ((c = s.next()) >= 0) {
// ...
// }
なお, 基底クラスである BaseBytecodeStream には以下の二つのサブクラスがある. RawBytecodeStream の方が (rewrite の影響を考えない分だけ) 速い模様.
((cite: hotspot/src/share/vm/interpreter/bytecodeStream.hpp))
// A RawBytecodeStream is a simple version of BytecodeStream.
// It is used ONLY when we know the bytecodes haven't been rewritten
// yet, such as in the rewriter or the verifier.
指定範囲の bytecode をたどるためのイテレータクラス(StackObjクラス).
なお, このクラス自体は abstract class であり, 実際に使われるのはサブクラス.
((cite: hotspot/src/share/vm/interpreter/bytecodeStream.hpp))
// Here is the common base class for both RawBytecodeStream and BytecodeStream:
class BaseBytecodeStream: StackObj {
See: here for details
BaseBytecodeStream クラスの具象サブクラスの1つ. こちらは rewrite 処理について考慮せずにイテレートする.
((cite: hotspot/src/share/vm/interpreter/bytecodeStream.hpp))
class RawBytecodeStream: public BaseBytecodeStream {
See: here for details
BaseBytecodeStream クラスの具象サブクラスの1つ. こちらは rewrite 処理についても考慮してイテレートする.
((cite: hotspot/src/share/vm/interpreter/bytecodeStream.hpp))
// In BytecodeStream, non-java bytecodes will be translated into the
// corresponding java bytecodes.
class BytecodeStream: public BaseBytecodeStream {
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.