hotspot/src/share/vm/runtime/jniHandles.cpp
// Determine if the handle is somewhere in the current thread's stack.
// We easily can't isolate any particular stack frame the handle might
// come from, so we'll check the whole stack.
bool JNIHandles::is_frame_handle(JavaThread* thr, jobject obj) {
{- -------------------------------------------
(1) obj 引数で指定されたオブジェクトのアドレスが
thr 引数で指定された Thread のスタックフレーム内にあれば true をリターン.
(逆に, なければ false をリターン)
(より正確には, Thread のスタックフレーム内の base から last_Java_sp の範囲, にあれば true.
この範囲にない場合や last_Java_sp が設定されていない場合は false をリターン)
(なお, active_handles ではなくスタックフレーム上に確保されるケースとしては
ダミーフレーム上に確保されたネイティブメソッド用の引数等)
---------------------------------------- -}
// If there is no java frame, then this must be top level code, such
// as the java command executable, in which case, this type of handle
// is not permitted.
return (thr->has_last_Java_frame() &&
(void*)obj < (void*)thr->stack_base() &&
(void*)obj >= (void*)thr->last_Java_sp());
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.