nodejs / V8是否将编译好的机器码存储在磁盘上的任何位置?

编辑 :Node从节点8.3开始使用字节码,在此之前,源直接编译为机器码。

我做了很多Python编码,并且在.pyc文件中总是存在字节码。

我想知道节点是否将其机器代码存储在相似的文件中,例如,将机器代码表示保留​​在磁盘上并在文件源不变时重新使用它是有意义的。

如果是这样,node / v8在哪里存储这个机器代码?

编辑2 :由于@dystroy提到下面这是一个愚蠢的我怎么能看到机器代码生成的V8?

V8在2016年推出了字节码解释器Ignition。您可以使用--print-bytecode (节点8.3和更新版本)打印字节--print-bytecode

 $ node --print-bytecode incrementX.js -e 'function incrementX(obj) {return 1 + obj.x;} incrementX({x: 42});` ... [generating bytecode for function: incrementX] Parameter count 2 Frame size 8 12 E> 0x2ddf8802cf6e @ StackCheck 19 S> 0x2ddf8802cf6f @ LdaSmi [1] 0x2ddf8802cf71 @ Star r0 34 E> 0x2ddf8802cf73 @ LdaNamedProperty a0, [0], [4] 28 E> 0x2ddf8802cf77 @ Add r0, [6] 36 S> 0x2ddf8802cf7a @ Return Constant pool (size = 1) 0x2ddf8802cf21: [FixedArray] in OldSpace - map = 0x2ddfb2d02309 <Map(HOLEY_ELEMENTS)> - length: 1 0: 0x2ddf8db91611 <String[1]: x> Handler Table (size = 16) 

请参阅了解V8的字节码 。

要查看机器代码,请使用--print-opt-code --code-comments

V8是一个即时编译器。 所以JavaScript不能像静态编译的Python编译器那样编译一次。 它是在需要执行时编译的。

您看不到为JavaScript生成的机器代码,因为它没有存储。 存储已编译的机器代码是没有意义的,因为编译会重复发生,并受运行时优化的影响。 你不会像python那样得到固定的机器代码,每次都发生。

从项目页面 :

V8首次执行时,将JavaScript源代码直接编译为机器码。 没有中间字节代码,没有解释器。

这就是为什么你不会find字节码,没有。

关于您编辑后的新问题,我认为这个相关问题大部分都是回答。 当然,V8通常没有理由用缺省设置将机器码写在磁盘上。 由于这段代码发生了很大的变化(请参阅上面的链接,解释如何创builddynamic类),这将是一个巨大的开销。

Interesting Posts