hotspot/src/share/vm/compiler/compileBroker.cpp
この関数は, 指定した JIT コンパイル要求が既に出されていないかどうかを確認する.
なおコメントによると, methodOopDesc は1ビットのフラグを持っているだけなので, メソッド全体の JIT コンパイルか OnStackReplace 用のループのコンパイルかの どちらかが動いていれば true になる. このため少し不正確なところがあるので, もしこれが問題になるようなら修正してもいい, とのこと.
// ------------------------------------------------------------------
// CompileBroker::compilation_is_in_queue
//
// See if this compilation is already requested.
//
// Implementation note: there is only a single "is in queue" bit
// for each method. This means that the check below is overly
// conservative in the sense that an osr compilation in the queue
// will block a normal compilation from entering the queue (and vice
// versa). This can be remedied by a full queue search to disambiguate
// cases. If it is deemed profitible, this may be done.
bool CompileBroker::compilation_is_in_queue(methodHandle method,
int osr_bci) {
{- -------------------------------------------
(1) methodOopDesc::queued_for_compilation() の結果をリターンするだけ.
---------------------------------------- -}
return method->queued_for_compilation();
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.