博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenJDK9 Hotspot:Zero 解释器 初探
阅读量:6824 次
发布时间:2019-06-26

本文共 913 字,大约阅读时间需要 3 分钟。

准备工作

  • 假设 openjdk 源代码目录为 jdk9dev

  • 编译 openjdk 时启用了 zero 解释器(参考 )

调用栈

先在 JavaMain 函数(参考 )中 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);       }   }}

转载地址:http://hflzl.baihongyu.com/

你可能感兴趣的文章
查看硬盘读取速率
查看>>
把匹配的小写转换成大写(\U、\u)
查看>>
【Android网络开发の5】Android中的网络数据下载
查看>>
解决PotPalyer不能拖放播放
查看>>
Linux安装mysql5.7
查看>>
HIVE常用操作以及函数
查看>>
【优达学城测评】SQL 支持许的数据类型(3)
查看>>
PHP CURL CURLOPT参数说明(curl_setopt)
查看>>
Learning NodeJs(1)
查看>>
怎么解决mysql远程连接报10038的错误
查看>>
js 父窗口可以找到子窗口的元素
查看>>
从FB10.3升级到11.0后几个问题的解决
查看>>
Linux下使用pure-ftpd建立匿名ftp访问
查看>>
PhalApi:[1.11] 快速入门: 接口开发示例 源码 图文
查看>>
分享插件
查看>>
HTML 页面中Buton 按钮提交,一个很坑的问题
查看>>
kitchen测试salt-formulas
查看>>
拿Nginx 部署你的静态网页
查看>>
23种设计模式
查看>>
openstack命令整理
查看>>