资讯专栏INFORMATION COLUMN

OpenJDK9 Hotspot:Zero 解释器 初探

zhangqh / 1847人阅读

摘要:准备工作假设源代码目录为编译时启用了解释器参考编译和调试调用栈先在函数参考虚拟机入口中设断点,然后在的方法中设置断点通过宏获取当前,然后创建第个栈帧,然后进入解释执行字节码

准备工作

假设 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);
       }
   }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65924.html

相关文章

  • OpenJDK9 Hotspot Mac OSX 编译和调试

    摘要:占用率太高,还出各种奇怪问题,转投调试安装下载源代码漫长等待,中间无数次中断安装安装可选如果要使用解释器,需要安装设置调试级别,设成可以提供更多的调试信息设置路径 Intellij CLion CPU 占用率太高,还出各种奇怪问题,转投 Xcode 调试 hotspot 安装 hg # brew install hg 下载 open jdk 9 源代码 # hg clone http...

    zhichangterry 评论0 收藏0
  • OpenJDK9 Hotspot : synchronized 浅析

    摘要:前言网上各路大神总结过各种关于内部实现,看别人的文章总觉得不过瘾,所以有了这篇文章,尝试再扒一次的底裤数据结构在分析源代码之前需要了解相关概念,比如等,参考网络上各种解说或者之前系列文章,这里重点介绍一下,,每个在内部都有一个的对象与之对应 前言 网上各路大神总结过各种关于 hotspot jvm synchronized 内部实现,看别人的文章总觉得不过瘾,所以有了这篇文章,尝试再扒...

    Amio 评论0 收藏0
  • OpenJDK9 Hotspot 虚拟机内部对象内存管理

    摘要:前言语言可以精确控制对象内存分配,出于性能考虑框架系统程序基本都会自己造轮子开发各种内存管理模块也不例外,它通过和方法的访问级别以及重载和方法来管理虚拟机内部对象的内存内存管理相关的基类定义了几个基类来作为大部分对象的基类顾名思义,它们只能 前言 C++ 语言可以精确控制对象内存分配,出于性能考虑 C++ 框架 or 系统程序基本都会自己 造轮子 开发各种内存管理模块. hotspot...

    W_BinaryTree 评论0 收藏0
  • OpenJDK9 Hotspot : Thread

    摘要:前言本文从类的方法的内部实现入手,分析多线程相关的数据结构类和原理类方法类的方法用于启动线程,方法内部调用了方法在源代码中搜索,可以看到对应函数在源代码中搜索函数核心代码计算线程堆栈大小创建对象初始化启动线程在创建时传入了一个函数指针, 前言 本文从 Java Thread 类的 start 方法的内部实现入手,分析 Hotspot JVM 多线程相关的数据结构(类)和原理 Threa...

    roundstones 评论0 收藏0
  • OpenJDK9 Hotspot java 虚拟机入口

    摘要:假设源代码目录为函数函数在,它处理完命令行参数后跳转到函数处理命令行选项函数在,它调用加载这个就是编译的产出在系统下在使用加载动态库并获取函数入口地址在系统下在熟悉的同学,对下面的代码应该会感到很亲切创建对象,并将控制流跳转到呵呵,在 假设 openjdk 源代码目录为 jdk9dev main函数 main 函数在 jdk9dev/jdk/src/java.base/share/na...

    JaysonWang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<