热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

nodejs/V8是否将已编译的机器代码存储在磁盘上的任何位置?-Doesnodejs/V8storecompiledmachinecodeanywhereondisk?

Edit:NodeusesbytecodesinceNode8.3,beforethat,sourceswerecompileddirectlytomachinecode

Edit: Node uses bytecode since Node 8.3, before that, sources were compiled directly to machine code.

编辑:节点使用自Node 8.3以来的字节码,在此之前,源代码直接编译为机器代码。

I do a lot of Python coding, and there's always bytecode lying around in .pyc files.

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

I was wondering if node stores its machine code in similar files, eg it would make sense to keep the machine code representation around on disk and re-use it if a file's source is unchanged.

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

If so, where does node/v8 store this machine code?

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

Edit 2: As @dystroy mentions below this is a dupe of How can I see the machine code generated by v8?

编辑2:正如@dystroy下面提到的这是一个骗局我如何看到v8生成的机器代码?

3 个解决方案

#1


4  

V8 introduced a bytecode interpreter, Ignition, in 2016. You can print the bytecode with --print-bytecode (Node 8.3 and newer).

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

$ 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 
 - length: 1
           0: 0x2ddf8db91611 
Handler Table (size = 16)

See Understanding V8's Bytecode.

请参阅了解V8的字节码。

To see the machine code, use --print-opt-code --code-comments.

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

#2


8  

V8 is a just in time compiler. So Javascript cannot be compiled just once like python compiler which is static compilation. It is compiled as and when it needs to be executed.

V8是一个及时的编译器。所以Javascript不能像python编译器那样只编译一次,这是静态编译。它是在需要执行时编译的。

You cannot see the generated machine code for Javascript, because it is not stored. It does not make sense to store the machine code that was compiled, as compilation happens repeatedly and is affected by runtime optimisations. You don't get fixed machine code like for python, every time it happens.

您无法看到生成的Javascript机器代码,因为它未存储。存储编译的机器代码没有意义,因为编译反复发生并受运行时优化的影响。每次发生时,你都没有得到像python这样的固定机器代码。

#3


4  

From the project's page :

从项目的页面:

V8 compiles Javascript source code directly into machine code when it is first executed. There are no intermediate byte codes, no interpreter.

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

That's why you won't find the bytecode, there is none.

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

Regarding the new question following your edit, I think this related question answers it mostly. Of course there's no reason in general for V8 to write the machine code on disk with the default setup. As this code changes a lot (see the link above, explaining how dynamic classes are created), that would be a gigantic overhead.

关于编辑后的新问题,我认为这个相关问题主要是回答它。当然,V8通常没有理由使用默认设置在磁盘上写入机器代码。由于此代码发生了很大变化(请参阅上面的链接,解释了如何创建动态类),这将是一个巨大的开销。


推荐阅读
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • JavaScript 基础语法指南
    本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • 本文总结了Java程序设计第一周的学习内容,涵盖语言基础、编译解释过程及基本数据类型等核心知识点。 ... [详细]
  • 对象自省自省在计算机编程领域里,是指在运行时判断一个对象的类型和能力。dir能够返回一个列表,列举了一个对象所拥有的属性和方法。my_list[ ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • Java 中 Writer flush()方法,示例 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • MySQL DateTime 类型数据处理及.0 尾数去除方法
    本文介绍如何在 MySQL 中处理 DateTime 类型的数据,并解决获取数据时出现的.0尾数问题。同时,探讨了不同场景下的解决方案,确保数据格式的一致性和准确性。 ... [详细]
  • HBase运维工具全解析
    本文深入探讨了HBase常用的运维工具,详细介绍了每种工具的功能、使用场景及操作示例。对于HBase的开发人员和运维工程师来说,这些工具是日常管理和故障排查的重要手段。 ... [详细]
author-avatar
hengldkslf
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有