29|性能:通过Orinoco、Jank Busters看垃圾回收
石川
你好,我是石川。
在前两讲中,我们从多线程开发的角度了解了 JavaScript 中的性能优化。
今天,我们再来看一下 JavaScript 中内存管理相关的垃圾回收(garbage collection)机制,以及用到的性能优化的相关算法。
实际上,在 JS 语言中,垃圾回收是自动的,也就是说并不是我们在程序开发中手工处理的,但是,了解它对理解内存管理的底层逻辑还是很有帮助的。特别是结合我们前面两节课讲到的,在前端场景中,当我们的程序使用的是图形化的 WebGL+Web Worker 的多线程来处理大量的计算或渲染工作时,了解内存管理机制则是非常必要的。特别提醒一下,这节课会涉及到比较多的理论和底层知识,一定要跟紧我们的课程节奏啊。
闲置状态和分代回收
我们在上一讲说到并行和并发的时候,有讲到过,前端的性能指标中,我们通常关注的是流畅度和反应度。在理想的状态下,为了获得丝滑流畅的体验,我们需要达到 60fps,也就是每帧在 16.6ms 内渲染。在很多的情况下,浏览器都可以在 16.6ms 内完成渲染,这个时候,如果提前渲染完了,剩下的时间我们的主线程通常是闲置(idle)的状态。而 Chrome 通常会利用这个闲置的时间来做垃圾回收。通过下面的图示,我们可以更加直观地看到主线程上这些任务的执行顺序。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
JavaScript内存管理中的垃圾回收机制对于应用性能至关重要。本文介绍了分代回收的概念,将内存堆分为年轻代和老年代,并详细解释了副回收器和主回收器的工作原理。副回收器采用并行回收,通过多线程间平行完成垃圾回收工作,提高了性能。而主回收器则采用并发处理,通过标记、清除和整理的步骤来管理内存。文章深入浅出地解释了垃圾回收的底层逻辑,为读者提供了深入理解JavaScript内存管理的知识。 在主回收器中,文章介绍了并发标记和增量标记两种方法。并发标记允许标记工作在多个工作线程上同时执行,提高了处理效率。而增量标记则利用主线程空闲时间处理标记任务,通过三色标记法和写屏障来保证标记的准确性。这些方法的应用使得垃圾回收可以在不影响程序执行的情况下进行,提高了应用的流畅度。 最后,文章指出随着Web应用的复杂度不断提高,内存管理和垃圾回收将是一个持续值得关注的话题。尤其在Web3.0、元宇宙等概念的兴起以及并行、并发实现的普及下,对前端对象创建和渲染工作的复杂度提出了更高的要求。因此,对于JavaScript的垃圾回收虽然是自动的,但在编写代码时仍有一些“手工”优化内存的方法,这也是需要读者深入思考和探讨的问题。 总之,本文通过深入剖析V8引擎的垃圾回收机制,为读者提供了全面的JavaScript内存管理知识,同时也引发了对于内存优化和性能提升的思考。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《JavaScript 进阶实战课》,新⼈⾸单¥59
《JavaScript 进阶实战课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(1)
- 最新
- 精选
- 度衡垃圾回收器通过可触达度来判断对象'活跃度',那些在运行时无法访问的对象即为可回收对象。因此,可以手动将不需要使用的对象变量赋值为null,从而使该对象不可访问,更快达能够可回收。2023-01-05归属地:北京
收起评论