V8垃圾回收机制

https://juejin.im/post/5edb313df265da76c01be187#heading-1

首先要知道新生代和老生代的垃圾回收机制

  • 新生代:存储活跃的对象,有两个一样大的存储空间from 和to,分配空间从from分配,to空闲,当from达到内存上限,则将from中的活跃对象复制到to中,清空from对象,将两者的功能置换
  • 老生代:在新生代复制对象时,如果一个对象已经被复制过,或超过空间的25%,则将其放入老生代,这里有更大的存储空间

标记-清除

  • 副垃圾回收机制:对应新生代,标记-复制-清除。在清除from空间时,从根节点开始标记能访问到的节点或反之,将能访问到的节点进行复制
  • 主垃圾回收机制:对应老生代,也是标记-清除,由于空间大对象多,为了不占用过多单线程资源,进行了优化,与副垃圾回收机制不同点在于会将不活跃的对象直接进行清除,为了避免碎片空间,还需要进行标记-整理,将活跃对象复制到一端,再进行清除

优化

  • 并行式 新生代老生代互不影响,并行处理,占用主进程
  • 增量式 将垃圾回收分段处理,维护一个标记位和标记表,一开始均为白色,将根节点放入工作表置灰,查找活跃节点置灰,结束后将整个活跃对象置黑,最终只剩下黑色和白色则视为结束,在过程中,不允许黑色直接指向白色,将白色置灰后指向黑色,保证继续进行工作表的标记工作
  • 并发式 与js进程并发
  • 空闲时 通过计算来分配剩余空闲时间 最高50ms

你可能感兴趣的:(V8垃圾回收机制)