15、隐藏类:如何在内存中快速查找对象属性你好,我是李兵。 我们知道JavaScript是一门动态语言,其执行效率要低于静态语言,V8为了提升JavaScript的执行速度,借鉴了很多静态语言的特性,比如实现了JIT机制,为了提升对象的属性访问速度而引入了隐藏类,为了加速运算而引入了内联缓存...2026-02-27图解 Google V8
14、字节码(二):解释器是如何解释执行字节码的你好,我是李兵。 在上节我们介绍了V8为什么要引入字节码,这节课我们来聊聊解释器是如何解释执行字节码的。学习字节码如何被执行,可以让我们理解解释器的工作机制,同时还能帮助我们搞懂JavaScript运行时的内存结构,特别是闭包的结构和非闭包数据的区别...2026-02-27图解 Google V8
13、字节码(一):V8为什么又重新引入字节码你好,我是李兵。 在第一节课我们就介绍了V8的编译流水线,我们知道V8在执行一段JavaScript代码之前,需要将其编译为字节码,然后再解释执行字节码或者将字节码编译为二进制代码然后再执行。 所谓字节码,是指编译过程中的中间代码,你可以把字节码看成...2026-02-27图解 Google V8
12、延迟解析:V8是如何实现闭包的你好,我是李兵。 在第一节我们介绍过V8执行JavaScript代码,需要经过编译和执行两个阶段,其中编译过程是指V8将JavaScript代码转换为字节码或者二进制机器代码的阶段,而执行阶段则是指解释器解释执行字节码,或者是CPU直接执行二进制机器...2026-02-27图解 Google V8
11、堆和栈:函数调用是如何影响到内存布局的你好,我是李兵。 相信你在使用JavaScript的过程中,经常会遇到栈溢出的错误,比如执行下面这样一段代码: 1234function foo() { foo() // 是否存在堆栈溢出错误?}foo() V8就会报告栈溢出的...2026-02-27图解 Google V8
10、机器代码:二进制机器码究竟是如何被CPU执行的你好,我是李兵。 在上一节我们分析了V8的运行时环境,准备好了运行时环境,V8就可以执行JavaScript代码了。在执行代码时,V8需要先将JavaScript编译成字节码,然后再解释执行字节码,或者将需要优化的字节码编译成二进制,并直接执行二进制...2026-02-27图解 Google V8