処理としては, java.lang.Thread オブジェクト内の eetop フィールドの値を確認するだけ.
java.lang.Thread オブジェクトには eetop という private field があり, 対応する JavaThread オブジェクトのポインタが格納されている. スレッドが死亡すると, この eetop フィールドが NULL になる.
(なお, このフィールドへのアクセサは, java_lang_Thread::thread() と java_lang_Thread::set_thread())
(See: JavaThread::prepare(), ensure_join())
((cite: hotspot/src/share/vm/classfile/javaClasses.cpp))
// Note: JDK1.1 and before had a privateInfo_offset field which was used for the
// platform thread structure, and a eetop offset which was used for thread
// local storage (and unused by the HotSpot VM). In JDK1.2 the two structures
// merged, so in the HotSpot VM we just use the eetop field for the thread
// instead of the privateInfo_offset.
//
// Note: The stackSize field is only present starting in 1.4.
JVM_IsThreadAlive() (= java.lang.Thread.isAlive()) -> java_lang_Thread::is_alive() -> java_lang_Thread::thread() -> oopDesc::address_field() (java_lang_Thread::_eetop_offset を引数として呼び出す)
See: here for details
java.lang.Thread.isAlive() は JVM_IsThreadAlive() で実装されている.
((cite: jdk/src/share/native/java/lang/Thread.c))
static JNINativeMethod methods[] = {
...
{"isAlive", "()Z", (void *)&JVM_IsThreadAlive},
See: here for details
See: here for details
(#Under Construction)
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.