第六篇《Google V8 原理》之 宏任务微任务

233 阅读1分钟

宏任务和微任务

宏任务

宏任务很简单,就是指消息队列中的等待被主线程执行的事件。每个宏任务在执行时,V8都会重新创建栈,然后随着宏任务中函数调用,栈也随之变化,最终,当该宏任务执行结束时,整个栈又会被清空,接着主线程继续执行下一个宏任务。

宏任务

微任务稍微复杂一点,其实你可以把微任务看成是一个需要异步执行的函数,执行时机是在主函数执行结束之后、当前宏任务结束之前。

微任务可以在实时性和效率之间做一个有效的权衡。另外使用微任务,可以改变我们现在的异步编程模型,使得我们可以使用同步形式的代码来编写异步调用。

语法糖:async await

image.png

垃圾回收器

window.test = new Object()
window.test.a = new Uint16Array(100)

image.png


window.test.a = new Object()

image.png

结论

a 属性之前是指向堆中数组对象的,现在已经指向了另外一个空对象,那么此时堆中的数组对象就成为了垃圾数据,因为我们无法从一个根对象遍历到这个 Array 对象。不过,你不用担心这个数组对象会一直占用内存空间,因为 V8 虚拟机中的垃圾回收器会自动清理