hotspot/src/share/vm/gc_implementation/g1/ptrQueue.cpp
bool PtrQueueSet::process_or_enqueue_complete_buffer(void** buf) {
{- -------------------------------------------
(1) カレントスレッドが JavaThread で, かつ...#TODO の場合には,
PtrQueueSet::mut_process_buffer() (をサブクラスがオーバーライドしたもの) を呼び出して
この場で処理してしまう.
成功したら true をリターンする.
---------------------------------------- -}
if (Thread::current()->is_Java_thread()) {
// We don't lock. It is fine to be epsilon-precise here.
if (_max_completed_queue == 0 || _max_completed_queue > 0 &&
_n_completed_buffers >= _max_completed_queue + _completed_queue_padding) {
bool b = mut_process_buffer(buf);
if (b) {
// True here means that the buffer hasn't been deallocated and the caller may reuse it.
return true;
}
}
}
{- -------------------------------------------
(1) 上記以外の場合, あるいは上記のケースだが失敗した場合は,
PtrQueueSet::enqueue_complete_buffer() を呼んでバッファを登録した後,
false をリターン.
---------------------------------------- -}
// The buffer will be enqueued. The caller will have to get a new one.
enqueue_complete_buffer(buf);
return false;
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.