浏览器内核分析7 -- JavaScript引擎

本文探讨了JavaScript性能问题,分析JS比Java慢的原因,并详细介绍了V8引擎的工作流程,包括数据表示、编译过程、内存管理和Snapshot技术。同时对比了JavaScriptCore引擎的异同,强调了两者在编译阶段的不同策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 JS语言与性能问题

JS比Java慢的原因

和大多数解释型语言一样,JavaScript运行也比较慢,和Java等静态编译语言相比,究其原因大概有

  1. JS变量无类型信息,不能做偏移信息查找,偏移信息共享等编译阶段的优化
  2. JS将源码编译为字节码的过程要占用运行时间,而Java的编译则是开发阶段,不占用任何运行时间。故Java可以尽可能的在编译阶段做优化

JS引擎组成

一个JS引擎大概包含以下几个部分。

  • 编译器:将源码转变为抽象语法树,某些引擎还将语法树转变为了字节码。编译过程会占用用户时间。
  • 解释器:接收字节码,执行它。需要处理内存分配,动态优化等
  • JIT:运行时优化,热点代码字节码转变为本地代码。和Java中的JIT类似。如果优化没有达到效果,还会回退为优化前代码。
  • 垃圾回收器GC和分析工具,分析工具收集运行时信息,如热点代码探测。

2 V8引擎

数据表示

数据的表示有两部分。数据实际内容,变长的,如String,Object等。 数据句柄,大小固定,包含指向数据的指针。这样设计的原因是,垃圾回收碎片处理时,一般需要移动数据来形成连续的一块可用内存。使用句柄可以通过修改句柄中指针即可,而数据本身不用改变。我们引用这个数据时,通过句柄即可。对于整形数据,直接放在放在句柄中。而对于其他数据,句柄保存的都只是他们的指针而已,真实内存需要从堆中去

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢杨易

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值