认识V8

作者: 翔子丶 | 来源:发表于2021-01-14 19:46 被阅读0次
V8介绍
  • V8是一款主流的JavaScript执行引擎
  • V8采用即时编译,运行效果快
  • V8内存设限(64位|1.5G,32位|800M)
V8垃圾回收策略
  • 采用分代回收的思想,因为内存有上限
  • 内存分为新生代(32M|16M),老生代
  • 针对不同对象采用不同算法
V8回收新生代对象策略
  • V8内存分配
image-20210114082620547.png

V8内存空间分为老生代和新生代,新生代指存活时间较短的对象(局部作用域定义的变量,使用完之后就可以被垃圾回收;而全局的变量,需程序执行完之后才能被回收),新生代中又一分为二From和To空间

  • 垃圾回收实现

    回收过程采用复制算法+标记整理算法,From空间位使用空间,保存活动对象,To为空闲空间;From空间完成标记整理后将活动对象拷贝到To空间,然后再次交换空间并释放To空间

  • 回收细节

    拷贝过程中某一个变量在老生代对象中也会出现,这是就出现晋升,晋升就是将新生代对象移动至老生代对象进行存储

    判断标准:一轮GC过后还存活的新生代对象;To空间使用率超过25%,因为回收完成,To空间会转换到From空间,如果占比过高,会影响后续内存分配

V8回收老生代对象策略

老生代对象指存活时间较长的对象,64为操作系统1.4G,32位700M

  • 垃圾回收实现

    采用标记清除完成垃圾空间的回收、采用标记整理进行空间优化、采用增量标记算法进行效率优化

  • 与新生代对比

    新生代垃圾回收采用空间换时间的策略,因为空间小;而老生代不适合复制算法,因为老生代空间大,会导致有一半空间会不能使用;并且老生代对象多,复制存活对象的效率很低

  • 标记增量优化垃圾回收

    标记增量为解决标记清除的长卡顿问题(老生代对象多,垃圾回收时间长,垃圾回收与程序运行同步执行,GC太多会导致程序卡顿,为减少卡顿,V8对标记进行优化,将一次停顿进行得标记过程,分成了很多小步,每执行完一小步程序执行一会,这样交替多次后完成标记)

image-20210114083959454.png

相关文章

  • JavaScript引擎V8中的垃圾回收机制

    目录 认识V8 V8垃圾回收策略 V8常用的GC算法 V8的分代回收V8的内存分配新生代对象回收主要使用算法回收过...

  • 认识V8

    V8介绍 V8是一款主流的JavaScript执行引擎 V8采用即时编译,运行效果快 V8内存设限(64位|1.5...

  • 认识 V8 引擎

    前言 1.渲染引擎及网页渲染 1.1.渲染引擎 渲染引擎:能够将HTML/CSS/JavaScript文本及相应的...

  • V8词法分析(Scanner)

    概述 对于js源码,需要经过一系列的操作才能让V8认识它们。在之前的概率里也有介绍,V8最初会把js源码解析成一个...

  • 认识V8引擎

    JavaScript绝对是最火的编程语言之一,一直具有很大的用户群,随着在服务端的使用(NodeJs),更是爆发了...

  • JavaScript可以和C++一样快

    如果看了《为V8优化JavaScript》这篇文章,就会了解到v8设计的独到之处,大家都知道v8快,但是v8有多快...

  • 2019-05-30

    1. V8内存管理和相关问题 Node.js基于V8引擎,其内存管理就是V8的内存管理。 V8内置了自动垃圾回收(...

  • Mac | 编译和使用 Google V8 引擎

    1.了解V8 登录到官网地址V8 JIT

  • V8世界探险 (1) - v8 API概览

    V8世界探险 (1) - v8 API概览 v8是Google开发的JavaScript引擎,自推出后就对js生态...

  • issue1195777

    原理 https://chromium-review.googlesource.com/c/v8/v8/+/283...

网友评论

    本文标题:认识V8

    本文链接:https://www.haomeiwen.com/subject/htqbaktx.html