OpenJDK9 Hotspot ero 解释器 初探
准备工作
-
假设 openjdk 源代码目录为 jdk9dev
-
编译 openjdk 时启用了 zero 解释器,可以参考 OpenJDK9 Hotspot Mac OSX 编译和调试
调用栈
先在 JavaMain 函数(参考 OpenJDK9 Hotpot java 虚拟机入口)中 CallStaticVoidMethod 设断点,然后在 CppInterpreter_zero.cpp 的 normal_entry 方法中设置断点:
CppInterpreter::normal_entry
通过 THREAD 宏获取当前 thread,然后创建第 0 个栈帧,然后进入 main loop 解释执行 字节码
int CppInterpreter::normal_entry(Method method, intptr_t UNUSED, TRAPS) {
JavaThread thread = (JavaThread*) THREAD;
// Allocate and initialize our frame.
InterpreterFrame *frame = InterpreterFrame::build(method, CHECK_0);
thread->push_zero_frame(frame);
// Execute those bytecodes!
main_loop(0, THREAD);
// No deoptimized frames on the stack
return 0;
}
CppInterpreter::main_loop
void CppInterpreter::main_loop(int recurse, TRAPS) {
...
while (true) {
if (JvmtiExport::can_post_interpreter_events()) {
BytecodeInterpreter::runWithChecks(istate);
} else {
BytecodeInterpreter::run(istate);
}
}
}
c++# java, thread, main_loop
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!