これらは, トラブルシューティング用のクラス. より具体的に言うと, JNI のネイティブコードが起こしうる問題を定期的に検査するためのクラス.
トラブルシューティング用のクラス (関連する product オプションが指定されている場合にのみ使用される) (See: CheckJNICalls, -Xcheck:jni).
(なお, CheckJNICalls オプションと -Xcheck:jni オプションは同じもの)
JNI のネイティブコードが起こしうる問題を定期的に検査するためのクラス (より正確には, そのための機能を納めた名前空間(AllStatic クラス)). 例えば, signal handler が上書きされる, zero page のマッピングが上書きされる, 等の問題を検出する.
((cite: hotspot/src/share/vm/runtime/jniPeriodicChecker.hpp))
/*
* This gets activated under Xcheck:jni (CheckJNICalls), and is typically
* to detect any errors caused by JNI applications, such as signal handler,
* hijacking, va 0x0 hijacking either by mmap or an OS error.
*/
((cite: hotspot/src/share/vm/runtime/jniPeriodicChecker.hpp))
class JniPeriodicChecker : AllStatic {
Threads::create_vm() 内で(のみ)使用されている.
(CheckJNICalls オプションが指定されている場合, Threads::create_vm() 内で JniPeriodicChecker::engage() が呼ばれて検査処理が開始される)
実際の検査処理は JniPeriodicCheckerTask に丸投げしている (JniPeriodicChecker は JniPeriodicCheckerTask を開始させるクラス).
JniPeriodicChecker::disengage() というメソッドも提供しているが, これは使用されていない.
(これは JniPeriodicCheckerTask を停止するためのメソッド. コメントを読むと before_exit() から呼び出されるように見えるが呼び出されていない... (バグ?? #TODO))
((cite: hotspot/src/share/vm/runtime/jniPeriodicChecker.cpp))
/*
* the disengage() method is responsible for deactivating the periodic
* task. This method is called from before_exit() in java.cpp and is only called
* after the WatcherThread has been stopped.
*/
void JniPeriodicChecker::disengage() {
See: here for details
JniPeriodicChecker クラス用の補助クラス.
定期間隔で JNI のネイティブコードが起こしうる問題を検査するためのクラス(PeriodicTaskクラス).
((cite: hotspot/src/share/vm/runtime/jniPeriodicChecker.cpp))
// --------------------------------------------------------
// Class to aid in periodic checking under CheckJNICalls
class JniPeriodicCheckerTask : public PeriodicTask {
JniPeriodicChecker クラスの _task フィールド (static フィールド) に(のみ)格納されている.
JniPeriodicChecker::engage() 内で(のみ)生成されている.
定期間隔で os::run_periodic_checks() を呼び出しているだけ.
((cite: hotspot/src/share/vm/runtime/jniPeriodicChecker.cpp))
void task() { os::run_periodic_checks(); }
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.