hyengine编译实现问题之复用 quickjs 原代码如何解决

简介: hyengine编译实现问题之复用 quickjs 原代码如何解决

问题一:quickjs 中对 global 对象访问的优化措施是什么,其原理是什么?


quickjs 中对 global 对象访问的优化措施是什么,其原理是什么?


参考回答:

quickjs 中对 global 对象访问的优化措施是加上了 inline cache。由于 quickjs 的 global 对象操作被单独编译为 OP_get_var/OP_put_var 等 op,这些 op 的实现效率较低。inline cache 的原理是缓存某段代码访问的属性在对象属性数组中的偏移,这样下次访问时就可以直接通过偏移来获取属性值,而无需再进行重复的属性数组遍历,从而提高了访问效率。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/666240



问题二:hygc 的实现方案是如何复用 quickjs 原有代码的?


hygc 的实现方案是如何复用 quickjs 原有代码的?


参考回答:

hygc 的实现方案复用了部分 quickjs 原有的代码,特别是在 gc 流程的设计和实现上。hygc 采用了多线程三色标记 gc 方案,这一方案在 quickjs 原有的引用计数 + mark sweep gc 方案基础上进行了优化和替换。通过复用 quickjs 的部分代码,hygc 实现了尽可能简单的功能,同时保持了与 quickjs 的兼容性。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/666241



问题三:HYJSGlobalIC 数据结构中的 void *obj 字段有什么特殊作用?


HYJSGlobalIC 数据结构中的 void *obj 字段有什么特殊作用?


参考回答:

HYJSGlobalIC 数据结构中的 void obj 字段用于存储对 quickjs 中 global 对象的引用,这个引用可以是 global_obj 或 global_var_obj。由于 quickjs 的 global 可能存在于这两个不同的对象中,因此 void obj 字段用于在 inline cache 中记录具体是哪个对象,以便后续快速访问 global 对象的属性。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/666242



问题四:hyjs_GetGlobalICOffset 方法的主要作用是什么?


hyjs_GetGlobalICOffset 方法的主要作用是什么?


参考回答:

hyjs_GetGlobalICOffset 方法的主要作用是为当前执行的 opcode 分配一个 inline cache 的 cache_index。这个 cache_index 用于在后续的 global 属性访问中,快速定位到对应的 inline cache 入口,以便检查缓存是否有效或更新缓存内容。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/666243



问题五:在访问 global 对象属性时,如何通过 HYJSGlobalIC 来检查缓存是否有效?


在访问 global 对象属性时,如何通过 HYJSGlobalIC 来检查缓存是否有效?


参考回答:

在访问 global 对象属性时,首先会根据 cache_index 从 inline cache 中取出对应的 HYJSGlobalIC 结构体。然后,比较该结构体中的 prop 字段(即属性 atom)与当前需要访问的属性的 atom 是否相同。如果相同,说明缓存仍然有效,此时可以直接使用 offset 字段从 global 对象的属性数组中取出属性值。如果不同,则说明缓存无效,需要走慢路径来遍历属性数组并更新 inline cache。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/666244

相关文章
|
2月前
|
XML 编译器 API
|
5月前
|
前端开发 JavaScript Java
hyengine 编译问题之复用脚本引擎如何解决
hyengine 编译问题之复用脚本引擎如何解决
|
5月前
|
缓存 索引
hyengine编译问题之快路径优化如何解决
hyengine编译问题之快路径优化如何解决
|
5月前
|
存储
hyengine 编译问题之创建对象异常如何解决
hyengine 编译问题之创建对象异常如何解决
|
5月前
|
Java 测试技术
hyengine microbench测试问题之提升jit优化如何解决
hyengine microbench测试问题之提升jit优化如何解决
|
5月前
hyengine 代码块问题之指令拆分如何解决
hyengine 代码块问题之指令拆分如何解决
|
6月前
|
JSON 前端开发 Java
代码的应用重构问题之BaseActivity类的主要功能问题如何解决代码缩减的主要问题如何解决
代码的应用重构问题之BaseActivity类的主要功能问题如何解决代码缩减的主要问题如何解决
|
7月前
|
缓存 自然语言处理 前端开发
JVM系列8-前端编译与优化
JVM系列8-前端编译与优化
40 0
|
前端开发 数据安全/隐私保护 Windows
如何做到每天比别人少写200行代码?
大家好,我是冰河~~ 这次我把工作中总结的经常使用的正则表达式共享出来了,正是掌握了这些正则表达式,冰河平均每天比别人少写200行代码,极大的提高了研发效率,建议小伙伴们收藏,平时尝试着使用到自己的项目中!!
120 0
|
C++ 编译器 C语言
带你读《LLVM编译器实战教程》之二:外部项目
本书的前半部分将向您介绍怎么样去配置、构建、和安装LLVM的不同软件库、工具和外部项目。接下来,本书的后半部分将向您介绍LLVM的各种设计细节,并逐步地讲解LLVM的各个编译步骤:前段、中间表示(IR)、后端、即时编译(JIT)引擎、跨平台编译和插件接口。本书包含有大量翔实的示例和代码片段,以帮助读者平稳顺利的掌握LLVM的编译器开发环境。