##堆栈

(gdb) bt
#0  PhaseOutput::safepoint_poll_table (this=0x7fffd0bfb950) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/opto/output.hpp:173
#1  0x00007ffff689634e in PhaseOutput::fill_buffer (this=0x7fffd0bfb950, cb=0x7fffd0bfb970, blk_starts=0x7fffb0042e40)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/opto/output.cpp:1824
#2  0x00007ffff6890444 in PhaseOutput::Output (this=0x7fffd0bfb950) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/opto/output.cpp:432
#3  0x00007ffff602fe6b in Compile::Code_Gen (this=0x7fffd0bfde90) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/opto/compile.cpp:2775
#4  0x00007ffff6027214 in Compile::Compile (this=0x7fffd0bfde90, ci_env=0x7fffd0bfeac0, generator=0x7ffff695a52a <OptoRuntime::monitor_notify_Type()>,stub_function=0x7ffff6959db8 <OptoRuntime::monitor_notify_C(oopDesc*, JavaThread*)> "\363\017\036\372UH\211\345SH\203\354hH\211}\230H\211u\220H\213U\220H\215E\300H\211\326H\211\307\350\346rN\377\350\030ړ\377\203\360\001\204\300t&H\213M\220H\213E\230\272", stub_name=0x7ffff72816b7 "_monitor_notify_Java", is_fancy_jump=0, pass_tls=false, return_pc=false, directive=0x7ffff01b1f90)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/opto/compile.cpp:925
#5  0x00007ffff6958b70 in OptoRuntime::generate_stub (env=0x7fffd0bfeac0, gen=0x7ffff695a52a <OptoRuntime::monitor_notify_Type()>,C_function=0x7ffff6959db8 <OptoRuntime::monitor_notify_C(oopDesc*, JavaThread*)> "\363\017\036\372UH\211\345SH\203\354hH\211}\230H\211u\220H\213U\220H\215E\300H\211\326H\211\307\350\346rN\377\350\030ړ\377\203\360\001\204\300t&H\213M\220H\213E\230\272", name=0x7ffff72816b7 "_monitor_notify_Java", is_fancy_jump=0, pass_tls=false, return_pc=false)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/opto/runtime.cpp:171
#6  0x00007ffff6958934 in OptoRuntime::generate (env=0x7fffd0bfeac0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/opto/runtime.cpp:148
#7  0x00007ffff5f07753 in C2Compiler::init_c2_runtime () at /home/yym/openjdk17/jdk17-master/src/hotspot/share/opto/c2compiler.cpp:78
#8  0x00007ffff5f077d7 in C2Compiler::initialize (this=0x7ffff02c01f0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/opto/c2compiler.cpp:91
#9  0x00007ffff6043287 in CompileBroker::init_compiler_runtime () at /home/yym/openjdk17/jdk17-master/src/hotspot/share/compiler/compileBroker.cpp:1801
#10 0x00007ffff6043806 in CompileBroker::compiler_thread_loop () at /home/yym/openjdk17/jdk17-master/src/hotspot/share/compiler/compileBroker.cpp:1938
#11 0x00007ffff6065c02 in CompilerThread::thread_entry (thread=0x7ffff02c08c0, __the_thread__=0x7ffff02c08c0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/compiler/compilerThread.cpp:59
#12 0x00007ffff6b5e498 in JavaThread::thread_main_inner (this=0x7ffff02c08c0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/runtime/thread.cpp:1305
#13 0x00007ffff6b5e32e in JavaThread::run (this=0x7ffff02c08c0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/runtime/thread.cpp:1288
#14 0x00007ffff6b5ba31 in Thread::call_run (this=0x7ffff02c08c0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/runtime/thread.cpp:394
#15 0x00007ffff68752bb in thread_native_entry (thread=0x7ffff02c08c0) at /home/yym/openjdk17/jdk17-master/src/hotspot/os/linux/os_linux.cpp:720
#16 0x00007ffff7c94ac3 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:442
#17 0x00007ffff7d26850 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81Thread 14 "C2 CompilerThre" hit Breakpoint 5, PhaseOutput::safepoint_poll_table (this=0x7fffd0bfb950) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/opto/output.hpp:173
173       C2SafepointPollStubTable* safepoint_poll_table() { return &_safepoint_poll_table; }
(gdb) bt
#0  PhaseOutput::safepoint_poll_table (this=0x7fffd0bfb950) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/opto/output.hpp:173
#1  0x00007ffff689634e in PhaseOutput::fill_buffer (this=0x7fffd0bfb950, cb=0x7fffd0bfb970, blk_starts=0x7fffb0033610)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/opto/output.cpp:1824
#2  0x00007ffff6890444 in PhaseOutput::Output (this=0x7fffd0bfb950) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/opto/output.cpp:432
#3  0x00007ffff602fe6b in Compile::Code_Gen (this=0x7fffd0bfde90) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/opto/compile.cpp:2775
#4  0x00007ffff6027214 in Compile::Compile (this=0x7fffd0bfde90, ci_env=0x7fffd0bfeac0, generator=0x7ffff695a0fe <OptoRuntime::new_array_Type()>,stub_function=0x7ffff6959052 <OptoRuntime::new_array_nozero_C(Klass*, int, JavaThread*)> "\363\017\036\372UH\211\345H\201", <incomplete sequence \354\220>,stub_name=0x7ffff728160d "_new_array_nozero_Java", is_fancy_jump=0, pass_tls=true, return_pc=false, directive=0x7ffff01b1f90)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/opto/compile.cpp:925
#5  0x00007ffff6958b70 in OptoRuntime::generate_stub (env=0x7fffd0bfeac0, gen=0x7ffff695a0fe <OptoRuntime::new_array_Type()>,C_function=0x7ffff6959052 <OptoRuntime::new_array_nozero_C(Klass*, int, JavaThread*)> "\363\017\036\372UH\211\345H\201", <incomplete sequence \354\220>,name=0x7ffff728160d "_new_array_nozero_Java", is_fancy_jump=0, pass_tls=true, return_pc=false) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/opto/runtime.cpp:171
#6  0x00007ffff69586d3 in OptoRuntime::generate (env=0x7fffd0bfeac0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/opto/runtime.cpp:141
#7  0x00007ffff5f07753 in C2Compiler::init_c2_runtime () at /home/yym/openjdk17/jdk17-master/src/hotspot/share/opto/c2compiler.cpp:78
#8  0x00007ffff5f077d7 in C2Compiler::initialize (this=0x7ffff02c01f0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/opto/c2compiler.cpp:91
#9  0x00007ffff6043287 in CompileBroker::init_compiler_runtime () at /home/yym/openjdk17/jdk17-master/src/hotspot/share/compiler/compileBroker.cpp:1801
#10 0x00007ffff6043806 in CompileBroker::compiler_thread_loop () at /home/yym/openjdk17/jdk17-master/src/hotspot/share/compiler/compileBroker.cpp:1938
#11 0x00007ffff6065c02 in CompilerThread::thread_entry (thread=0x7ffff02c08c0, __the_thread__=0x7ffff02c08c0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/compiler/compilerThread.cpp:59
#12 0x00007ffff6b5e498 in JavaThread::thread_main_inner (this=0x7ffff02c08c0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/runtime/thread.cpp:1305
#13 0x00007ffff6b5e32e in JavaThread::run (this=0x7ffff02c08c0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/runtime/thread.cpp:1288
#14 0x00007ffff6b5ba31 in Thread::call_run (this=0x7ffff02c08c0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/runtime/thread.cpp:394
#15 0x00007ffff68752bb in thread_native_entry (thread=0x7ffff02c08c0) at /home/yym/openjdk17/jdk17-master/src/hotspot/os/linux/os_linux.cpp:720
#16 0x00007ffff7c94ac3 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:442
#17 0x00007ffff7d26850 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81

OpenJDK 17堆栈信息,分析如下:

核心结论

  1. 线程正在执行C2编译器初始化工作:线程名为"C2 CompilerThre",说明这是C2编译器线程(JIT编译线程)。

  2. 处于运行时存根(Runtime Stub)生成阶段:正在为JVM关键操作(如monitor_notifynew_array_nozero)生成本地代码存根。

  3. 核心操作是代码生成与安全点轮询表处理:在PhaseOutput::fill_buffer()阶段,正在处理安全点轮询表(Safepoint Poll Table),用于JVM安全点检查。


堆栈关键点解析

首次堆栈(生成monitor_notify存根)

plaintext

#4  Compile::Compile(... stub_function=OptoRuntime::monitor_notify_C ...)
#5  OptoRuntime::generate_stub(... name="_monitor_notify_Java" ...)
#7  C2Compiler::init_c2_runtime()
  • 目标存根:为Object.notify()方法生成本地代码存根(_monitor_notify_Java)。

  • 作用:实现Java对象监视器(锁)的唤醒操作。

第二次堆栈(生成new_array_nozero存根)

plaintext

#4  Compile::Compile(... stub_function=OptoRuntime::new_array_nozero_C ...)
#5  OptoRuntime::generate_stub(... name="_new_array_nozero_Java" ...)
#6  OptoRuntime::generate()
  • 目标存根:为数组分配生成本地代码存根(_new_array_nozero_Java)。

  • 作用:优化new T[size]操作(跳过数组初始化为零的步骤)。


执行流程说明

  1. 初始化C2运行时
    C2Compiler::init_c2_runtime() → 触发生成JVM关键操作的本地代码存根。

  2. 存根生成

    • OptoRuntime::generate():选择需要生成的存根类型。

    • OptoRuntime::generate_stub():具体存根生成入口。

    • 创建Compile对象,传入存根函数指针(如monitor_notify_Cnew_array_nozero_C)。

  3. 代码生成(JIT编译)

    • Compile::Code_Gen():调用代码生成模块。

    • PhaseOutput::Output():进入代码输出阶段。

    • PhaseOutput::fill_buffer():填充代码缓冲区,处理安全点轮询表。

  4. 安全点轮询表处理

    • PhaseOutput::safepoint_poll_table():访问安全点轮询表。

    • 作用:在生成的本地代码中插入安全点检查点,确保JVM能在GC等操作时挂起线程。


关键组件作用

组件作用
C2编译器线程后台线程,负责将热点Java方法编译为本地代码。
OptoRuntime运行时存根生成器,为JVM关键操作(如锁、数组分配)提供优化后的本地代码。
PhaseOutput代码输出模块,负责将中间表示(IR)转换为机器码,并处理元数据(如安全点)。
安全点轮询表存储代码中的安全点检查位置,确保线程能响应JVM暂停请求(如GC)。

总结

  • 当前操作:C2编译器线程正在为monitor_notifynew_array_nozero等JVM核心操作生成本地代码存根

  • 核心任务:在代码生成阶段(PhaseOutput::fill_buffer)处理安全点轮询表,确保生成的本地代码能正确响应JVM安全点请求。

  • 背景目的:这些存根是JVM运行时的重要组成部分,用于优化高频操作(如锁、内存分配),提升Java程序性能。

简单来说:这是JIT编译器的初始化阶段,正在为关键操作生成高效本地代码,并确保这些代码能与JVM的安全点机制协同工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/93217.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93217.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/93217.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

功能测试中常见的面试题-二

二、测试设计与用例编写题解释等价类划分 (Equivalence Partitioning) 和边界值分析 (Boundary Value Analysis)&#xff1f;并举例说明。等价类划分 (EP)&#xff1a; 将输入域划分为若干组&#xff08;等价类&#xff09;&#xff0c;假设同一组内的数据对揭露程序错误具有等…

SOLi-LABS Page-4 (Challenges)--54-65关

sql-54 翻译一下页面&#xff0c;得知我们只有十次机会。id参数是单引号闭合。 ?id-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schemadatabase()-- 我得到的表名是igsyiz2p7z。&#xff08;每个人得到的应该都不一样&#…

docker代码如何在vscod上修改

基于 docker-compose.yml文件&#xff08;包含 ​​emqx​​&#xff08;MQTT服务&#xff09;、​​backend​​&#xff08;后端服务&#xff09;、​​mysql​​&#xff08;数据库&#xff09;&#xff09;的详细运行、调试、增改删操作说明&#xff0c;结合流程图示意&…

HTML5 CSS3 从入门到精通:构建现代Web的艺术与科学

本文将带你系统地学习掌握现代Web前端的基础与核心&#xff0c;最终能够独立构建语义清晰、布局灵活、交互丰富的专业级网站。 第一章&#xff1a;夯实基础 - HTML5语义化与结构艺术 1.1 告别<div>混沌&#xff1a;语义化标签的力量 <header><h1>网站标题…

C# 微软依赖注入 (Microsoft.Extensions.DependencyInjection) 详解

文章目录 前言 核心原理 三大生命周期 核心接口与类 基础使用示例 关键特性详解 1、构造函数注入 2、作用域管理 3、服务解析方法 4、延迟加载 常见问题解决 问题1:循环依赖 问题2:多实现选择 性能优化技巧 扩展方法示例 前言 微软的依赖注入框架是 .NET Core/5+ 的核心组件…

【车联网kafka】Kafka核心架构与实战经验(第四篇)

一、社团扛把子不为人知的秘密 香港社团里&#xff0c;Kafka 是整个组织的名号&#xff0c;ZooKeeper 就是说一不二的长老团&#xff0c;各个片区的 “话事人” 就是 broker&#xff0c;而能统领所有片区的 “扛把子”&#xff0c;就是 Kafka 里的控制器。​ 1.1 选举的秘密 每…

Scala重点(基础、面向对象、高阶函数、集合、模式匹配)

1. 基础语法1.1. 注释和java一样我是单行注释 /* 我是多行注释 我是多行注释 */ /** * 我是文档注释 * 我是文档注释 */1.2. 语句语句可以不以分号结尾一条语句独占一行 println("Hello World!")多条语句在一行 println("Hello World!"); println("He…

明远智睿T113-i核心板:工业设备制造领域的革新利器

在工业设备制造这片充满挑战与机遇的领域&#xff0c;技术革新如同一股汹涌浪潮&#xff0c;不断重塑着市场竞争的格局。随着技术持续进步&#xff0c;市场竞争愈发激烈&#xff0c;制造商们面临着如何在保证产品卓越性能的同时&#xff0c;有效控制成本这一关键难题。在此背景…

122-基于Flask的校园霸凌数据可视化分析系统

校园霸凌数据可视化分析系统 - 基于Flask的全栈数据分析平台 本文详细介绍了一个基于Flask框架开发的校园霸凌数据可视化分析系统&#xff0c;从技术架构到功能实现&#xff0c;为数据分析项目开发提供参考。 &#x1f4cb; 目录 项目概述技术架构核心功能代码结构技术栈详解核…

Docker 网络设置方式详解

Docker 网络是容器通信的核心基础&#xff0c;它允许容器之间、容器与主机之间以及容器与外部网络之间进行数据交互。Docker 提供了多种网络驱动类型&#xff0c;适用于不同场景&#xff0c;下面详细介绍 Docker 网络的设置方式。一、Docker 网络的基本概念 Docker 网络通过驱动…

export default和export function的作用及export的含义

在 JavaScript 中&#xff0c;export 是一个关键字&#xff0c;用于将模块中的变量、函数、类等导出&#xff0c;以便其他模块可以导入和使用。export default 和 export&#xff08;非默认导出&#xff09;是两种不同的导出方式&#xff0c;它们在使用场景和语义上有明显的区别…

免费 ollama 可用地址共享 内含免费 deepseek,gpt,bge,llama,Qwen,embed 大模型等

ollama 共享 介绍 集ollama地址的批量添加&#xff0c;批量校验&#xff0c;批量获取 &#xff0c;api接口调用于一体 演示地址&#xff1a;ollama格式化工具 开源地址&#xff1a;https://gitee.com/web/ollama-share 使用说明 index.php 通过提交table 批量提交ollama地…

Android Audio实战——获取活跃音频类型(十五)

在 Android Audio 开发中,很多场景需要获取当前正在播放的音频类型,而在音频管理器 AudioManager 中并没有发现类似的接口,这一篇文章就来看一下实现获取活跃音频类型的方式。 一、音频类型获取 对于获取当前活跃音频流类型,在《硬按键调节音量》中是通过 getActiveStream…

Verilog功能模块--SPI主机和从机(02)--SPI主机设计思路与代码解析

前言 上一篇文章介绍了SPI的四种工作模式及其时序特性&#xff0c;相信各位同学已经掌握了SPI通信的核心原理。 本文用纯Verilog设计了功能完整的4线SPI主机&#xff0c;并详细说明了模块编码思路和使用注意事项&#xff0c;最后分享了源码。 一、模块功能 本Verilog功能模块—…

Decoder模型 向量模长表示什么

Decoder模型 向量模长表示什么 词和其他词的关系的强弱和关联程度;生僻词模长小 从实验结果来看,Qwen2-7B-Instruct的向量模长规律与之前的预期(“模长与语义丰富度、确定性正相关”)完全相反,这反映了Decoder-only模型(尤其是指令微调模型)的表征特性与Encoder-only模…

STL容器及其算法

C 标准库容器详解&#xff1a;特性、用法与场景选型容器是 C 标准库&#xff08;STL&#xff09;的核心组件&#xff0c;用于存储和管理数据。不同容器因底层实现不同&#xff0c;在性能、功能和适用场景上差异显著。本文系统梳理vector、list、set、map等常用容器&#xff0c;…

MySQL ZIP安装教程:从解压到启动

金金金上线&#xff01; 话不多&#xff0c;只讲你能听懂的前端知识 前言 我这里不能下载安装程序的mysql&#xff0c;由于电脑安全限制&#xff0c;安装时会弹出需要管理员账号密码权限&#xff0c;此路行不通&#xff0c;所以琢磨着免安装版本怎么个流程&#xff0c;好&#…

p2p打洞

p2p网络穿透库,它的C++版本目前只支持linux,不支持win,它最新版本的穿透用的tcp,老版本支持tcp/udp: https://libp2p.io/ P2P-udp的穿透教程: https://edu.51cto.com/lesson/731596.html 目前打洞机制最好的库是webrtc,其次是libnice,它是轻量级的专门打洞的库。 libni…

『“无恙心宽”,梗痛不常』——爱上古中医(12)(健康生活是coder抒写优质代码的前提条件——《黄帝内经》伴读学习纪要)

养心护心气血通&#xff0c;无痛无梗全身松。 笔记模板由python脚本于2025-08-10 15:54:46创建&#xff0c;本篇笔记适合至少通晓一门语言&#xff0c;熟悉基本编程范式的coder翻阅。 学习的细节是欢悦的历程 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅仅…

Spark 运行流程核心组件(一)作业提交

1、Job启动流程1、Client触发 SparkContext 初始化 2、SparkContext 向 Master 注册应用 3、Master 调度 Worker 启动 Executor 4、Worker 进程启动 Executor 5、DAGScheduler 将作业分解为 Stage&#xff1a; 6、TaskScheduler 分配 Task 到 Executor 2、核心组件组件职责Spar…