有哪些支持多线程追踪 JIT 编译器的例子吗?
2016-9-14 1:46:15
收藏:0
阅读:122
评论:2
JVM 和 .NET CLR 都包含支持多个用户线程的即时编译器。然而,我相信这些是方法一次性的 JITs 。
我知道的所有追踪 JITs,例如 LuaJIT 和 PyPy,都只支持单线程。
有没有支持多个用户线程的追踪 JITs 的例子?如果没有,是否存在任何技术原因阻止了这些的出现?
点赞
用户2711488
你的问题由于错误的前提而变得无关紧要。 Oracle 的 JVM/OpenJDK 的 HotSpot 优化器 _不是_“一次编译一个方法 JIT”。其中一个基本技术是内联能力,通常称为“积极的内联”,因为它会假定在动态方法调度的情况下,可能是最可能的目标,基于当前执行的分析(和其他提示)。这甚至包括反优化的能力,如果程序的运行时行为发生变化并且不再执行优化的代码路径。
内联是基础,因为大多数其他代码优化只有在方法代码内联到调用者时才真正发挥潜力,从而提供必要的上下文。
因此,使用 HotSpot JVM,您已经拥有一个利用已知执行路径的多线程优化环境。虽然不需要像“跟踪”描述的那样收集这些信息。由于这个 JVM 能够在任何时间创建线程的堆栈跟踪快照,它也可以在定义的时间间隔内窥探跟踪,比添加记录功能到每个方法调用具有更多的控制性能。因此,JVM 可以将跟踪的获取限制为实际消耗显着 CPU 时间的线程,并且本质上会得到一个实际的调用链,即使涉及的方法包含在不同线程的多个调用链中。
2016-09-14 09:51:14
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

Profiling (tracing) a running multi-threaded program is a lot harder, but also not impossible.
在运行多线程程序时进行跟踪(Profiling)是很困难的,但并非不可能。跟踪的整个目的是使得运行时比第一次优化编译器更好。如果线程相互关联,那么将修改代码的 JIT 必须理解代码在执行时不仅会产生什么副作用,还会对其他线程产生什么影响。
例如,当线程一需要访问内存中的大文件时,它是否会导致线程二因为无法访问而停顿?JIT 必须理解这类相互影响。否则,它可能会花费大量时间去优化线程二,而不是意识到线程一的代码会对线程二产生负面影响,尝试消除缓存刷新。
你是否考虑过尝试编写自己的跟踪多线程 JIT?
这是可以实现的,但需要做大量工作。