JNI の GetEnv() 関数は, 引数で指定されたバージョンに応じて 3通りの処理パスを持つ.
指定されたバージョンが JVMTI のものである場合:
JvmtiExport::get_jvmti_interface() で jvmtiEnv を取得してリターン.
指定されたバージョンが JNI のものである場合:
JavaThread::jni_environment() で JNIEnv を取得してリターン (See: here for details)
それ以外の場合:
エラー
GetEnv() での識別に用いるバージョンは以下のように定義されている.
((cite: hotspot/src/share/vm/prims/jvmtiExport.hpp))
enum {
JVMTI_VERSION_MASK = 0x70000000,
JVMTI_VERSION_VALUE = 0x30000000,
JVMDI_VERSION_VALUE = 0x20000000
};
(See: here for details) -> jni_GetEnv() -> JvmtiExport::is_jvmti_version() -> JvmtiExport::get_jvmti_interface() -> JvmtiEnv::create_a_jvmti() -> JvmtiEnv::JvmtiEnv() -> JvmtiEnvBase::JvmtiEnvBase() -> JvmtiEventController::env_initialize() -> JvmtiEventControllerPrivate::env_initialize() -> JvmtiEnvBase::initialize() -> JvmtiEnvBase::globally_initialize() -> JvmtiManageCapabilities::initialize() -> (See: here for details) -> JvmtiExtensions::register_extensions() -> (See: here for details) -> JvmtiThreadState::add_env() -> JvmtiEventControllerPrivate::recompute_enabled()
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.