找到未经V8优化的相应JS源代码

m.s*_*.s. 5 javascript performance jit v8 node.js

我尝试优化node.js应用程序的性能,因此我正在分析V8的JIT编译器的行为.

通过运行应用程序时node --trace_deopt --trace_opt --code_comments --print_optcode ...,输出包含许多重复行,如下所示:

[didn't find optimized code in optimized code map for 0x490a8b4aa69 <SharedFunctionInfo>]
Run Code Online (Sandbox Code Playgroud)

如何找出哪个javascript代码对应0x490a8b4aa69

完整输出可在此处获得.

Tyl*_*Y86 2

该错误消息曾经位于 的第 10200 行左右v8/src/objects.cc,但现在已不再存在。这基本上意味着当前没有对特定跟踪进行优化。可能是因为它未被使用,或者使用得很少。它可能是 Node.js 库函数。提供的地址位于内存中。您必须将调试器附加到 v8 并SharedFunctionInfo在该位置加载符号。也可能在生成消息的行上设置断点。

我认为知道哪些内容没有优化没有那么有用,因为有很多东西没有得到优化......只需获取输出--trace_opt并假设其他所有内容都没有优化。这只是一个暗示,表明已对优化代码执行了检查,但目前没有。也许尝试--trace_codegen逆向工作。

这看起来是一件非常耗时的研究事情。
托尔斯滕·洛伦兹(Thorsten Lorenz)就是问这个问题的人。