hotspot/src/share/vm/interpreter/interpreterRuntime.cpp
スタックオーバーフローが起こった時点では, もうスタックに空きがないので あらかじめ確保&初期化済みの StackOverflowError クラスを用いる. 同じ理由から, 生成した StackOverflowError オブジェクトのコンストラクタも呼び出さない.
// Special handling for stack overflow: since we don't have any (java) stack
// space left we use the pre-allocated & pre-initialized StackOverflowError
// klass to create an stack overflow error instance. We do not call its
// constructor for the same reason (it is empty, anyway).
IRT_ENTRY(void, InterpreterRuntime::throw_StackOverflowError(JavaThread* thread))
{- -------------------------------------------
(1) get_preinitialized_exception() を呼んで
StackOverflowError オブジェクトを生成し,
THROW_HANDLE() で送出する.
---------------------------------------- -}
Handle exception = get_preinitialized_exception(
SystemDictionary::StackOverflowError_klass(),
CHECK);
THROW_HANDLE(exception);
IRT_END
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.