javascript性能优化一 之垃圾回收

任何一种可以提高运营效率,降低运行开销的行为都是一种优化操作
内存管理
内存为什么需要管理?下图是一个典型的内存泄漏
javascript性能优化一 之垃圾回收

内存管理介绍

  • 内存:由可读写单元组成,表示一片可操作空间
  • 管理:人为的去操作一片空间的申请、使用和释放
  • 内存管理:开发者主动申请空间、使用空间、释放空间
  • 管理流程:申请-使用-释放

javaScript中的内存管理

  • 申请内存空间
  • 使用内存空间
  • 释放内存空间
    javascript性能优化一 之垃圾回收
    Js中的垃圾回收
    javascript性能优化一 之垃圾回收
    javascript性能优化一 之垃圾回收
    javascript性能优化一 之垃圾回收
    可达图示
    javascript性能优化一 之垃圾回收
    GC算法介绍
    GC定义与作用
  • GC就是垃圾回收机制的简写
  • GC可以找到内存中的垃圾、并释放和回收空间

javascript性能优化一 之垃圾回收
javascript性能优化一 之垃圾回收
javascript性能优化一 之垃圾回收
通过一个数字来判断当前的对象 是不是垃圾
在GC工作的时候给活动对象加上标记来判断是否是垃圾
标记整理和标记清除类似
V8中用到
引用计数算法实现原理
javascript性能优化一 之垃圾回收
引用计数算法优缺点
javascript性能优化一 之垃圾回收
javascript性能优化一 之垃圾回收
标记清除算法实现原理
标记-》清除
javascript性能优化一 之垃圾回收
javascript性能优化一 之垃圾回收
用递归的方式去查找可达对象,a1和b1在global里找不到,不是可达对象,那a1和b1就认为是垃圾对象

标记清除算法优缺点
javascript性能优化一 之垃圾回收
javascript性能优化一 之垃圾回收
地址不连续的时候,空间碎片化,由于当前所回收的垃圾对象在地址上本身是不连续的,由于这种不连续造成了回收之后分散在各个角落,那后续要使用的时候,如果刚好新的生成空间与它们匹配就能直接用,不匹配的时候容易多出来使用

标记整理算法实现原理
javascript性能优化一 之垃圾回收
javascript性能优化一 之垃圾回收
javascript性能优化一 之垃圾回收
javascript性能优化一 之垃圾回收
把所有活动对象进行标记,把当前的活动的对象地址进行移动,让活动对象连续的,最后再把活动右侧的所有的非活动对象进行回收,好处就是内存里不会出现分散的内存,能够最大化的利用内存
javascript性能优化一 之垃圾回收
认识V8
V8是一款主流的javascript执行引擎,在chrom浏览器和node平台都是采用的v8去执行js代码
V8采用即时编译,之前的javascript引擎都需要将代码先转成字节码然后再去执行,而v8就可以直接将源码翻译能可以运行的机器码,所以这个时候的速度是非常快的
V8的内存是设有上限的,内存空间设置了一个数值在64位的操作系统上,上限是不超过1.5个G的,32位的操作系统是不超过800M的,因为v8本身就是为了浏览器而制造的,现有的内存大小对于网页来说足够使用了

V8垃圾回收策略
javascript性能优化一 之垃圾回收
javascript性能优化一 之垃圾回收
javascript性能优化一 之垃圾回收
V8如何回收新生代对象
javascript性能优化一 之垃圾回收
javascript性能优化一 之垃圾回收
javascript性能优化一 之垃圾回收
javascript性能优化一 之垃圾回收
javascript性能优化一 之垃圾回收
javascript性能优化一 之垃圾回收
V8如何回收老生代对象
javascript性能优化一 之垃圾回收
javascript性能优化一 之垃圾回收
javascript性能优化一 之垃圾回收
javascript性能优化一 之垃圾回收
V8垃圾回收总结
javascript性能优化一 之垃圾回收