zoukankan      html  css  js  c++  java
  • 《浏览器工作原理与实践》读书笔记(2)

    V8 工作原理

    1.支持隐式类型转换的语言称为弱类型语言,不支持隐式类型转换的语言成为强类型语言。

    2.javascript 是一种弱类型、动态的语言。弱类型是指它支持隐式类型转换;动态是可以用同一个变量保存不同的类型。

    3.javascript 的内存空间:代码空间、栈空间和堆空间。

    4.闭包原理:当编译器执行到外部函数的时候,会对内部做一次预扫描,如果扫描到闭包的话,就会把闭包引用的变量保存到closure对象里面去,然后把这个对象放到堆里面(即使引用的是基本类型,还是会存放到堆里面去。另外闭包是放在外层函数的变量环境中,而不是内层函数的变量环境中)。

    5.垃圾回收:栈中的变量在执行结束之后,从执行上下文中直接销毁;堆中的变量就需要使用垃圾回收器来进行回收了。

    6.在V8中,会把堆分为新生代和老生代两个区域,新生代内存小,主要存放生存时间短的对象;老生代内存大,主要存放生存时间长或者占用内存大的对象。

    7.垃圾回收器的一般流程:标记空间中的活动对象和非活动对象;回收非活动对象所占的内存;最后做内存整理。

    8.新生代的垃圾回收使用Scavenge算法,主要是把新生代的区域分隔成两份,然后把里面的对象在整理的时候复制到另一份里面去,就这样不停地翻转的过程。

    9.老生代的垃圾回收使用标记-清除算法进行回收,然后使用标记-整理算法进行整理。

    10.全停顿:V8会定时把主线程的脚本停下来,做一次垃圾回收,然后再恢复脚本执行。由于垃圾回收的耗时可能会很长,所以它使用增量标记算法把过程分为多个小的子任务间断执行。

    11.V8执行 javascript 的过程(这种技术称为字节码 + JIT即时编译技术):

    1.生成抽象语法树和执行上下文。(词法分析、语法分析)
    2.使用解释器 Ignition 生成字节码。(对热点代码,就是多次执行的代码使用编译器 TurboFan 编译为高效的机器码)
    3.执行代码。(使用解释器 Ignition 逐条执行字节码,或者直接执行机器码)
    

    12.优化 javascript 性能的一些策略(中心主要在缩短单次脚本的执行时间和脚本的网络加载上):

    1.提升单次脚本的执行速度(避免一直占用主线程影响交互)。
    2.避免大的内联脚本(解析和编译会占用主线程)。
    3.减少 javascript 文件总量(提升下载速度)。
    
  • 相关阅读:
    修改requests_html.AsyncHTMLSessions使得支持url参数
    MyBatis查询返回Map示例代码
    java.util.ConcurrentModificationException 异常原因和解决方法
    Springboot整合RabbitMQ(四)——设置消息过期时间TTL
    MySql Lock wait timeout exceeded该如何处理? (转载)
    对开发流程优化的建议
    容器未正常启动-->docker ps看不到,docker ps -a可以看到-->执行命令时出现Container is not running
    Linux下C语言多线程编程
    curl库相关使用
    PCB走线&过孔载流分析
  • 原文地址:https://www.cnblogs.com/yangzhou33/p/13904609.html
Copyright © 2011-2022 走看看