JavaScript 性能优化习题

143 阅读5分钟
  • 1. 多选题[多选题]下列关于 JavaScript 内存管理的说法正确的是**(20分)**

    • A 在 JavaScript 使用过程中,开发者可以自由的申请指定大小的内存空间
    • B JavaScript 中内存的生命周期分为 申请内存、使用内存、释放内存三个步骤
    • C JavaScript 中的内存释放可以由开发者自己来完成
    • D JavaScript 代码运行时可以通过 GC 机制自动释放空间,不必担心内存泄露

    答案解析 A:JS 中的内存空间在变量定义时自动分配,程序员无法指定明确的大小;D:JS 执行平台虽然都存在 GC 机制,但是由于不同算法的限制,代码书写不当同样会导致内存无法回收,产生泄露

  • 2. 单选题[单选题]下列关于常见的 GC 算法描述有误的是**(20分)**

    • A 引用计数通过判断当前对象空间的引用数是否为 0 来决定是否回收对象空间
    • B 标记清除可以解决空间碎片化的问题
    • C 标记整理的标记阶段与标记清除完全一致
    • D 分代回收将对象分为新生代和老生代二种

    答案解析 B:标记清除算法的缺点就是找到垃圾对象空间后直接进行回收,而有可能产生大量碎片化空间

  • 3. 多选题[多选题]下列关于可达对象描述正确的是**(20分)**

    • A 只有通过根可以直接找到的对象才是可达对象
    • B 标记清除算法的第一个阶段会找到所有的可达对象
    • C let a = 2; let b = a; 在这段代码中 b 不是一个可达对象
    • D 标记整理算法中会对所有的可达对象进行空间整理

    答案解析 A:在一个作用域链上,只要通过根可以有路径查找到的对象都是可达对象;C:a b 都属于全局作用域中的对象,所以都是可达对象

  • 4. 多选题[多选题]下列关于 V8 描述正确的是**(20分)**

    • A V8 是一款 JavaScript 执行引擎,只有 Chrome 浏览器在使用
    • B V8 采用的是即时编译,相对于其它引擎,它执行JS 代码的效率更高
    • C V8 引擎中内存空间的大小是有上限的,64位系统下是 1.4G ,32位系统下是 700M
    • D V8 采用的是分代回收垃圾的思想

    答案解析 A:V8是一款执行引擎,但不只有 Chrome 在用,NodeJS 平台也在用;C:V8 内存空间的确设限,但1.4G 700M 只是老生代存储区大小

  • 5. 多选题[多选题]下列关于 V8 垃圾回收说法正确的是**(20分)**

    • A V8 采用分代回收思想,将内存分为新生代存储区和老生代存储区
    • B 针对于新生代存储区采用空间复制和标记整理的算法
    • C 新生代存储区中将 From 空间中的所有对象拷贝至 To 空间
    • D 新生代存储区中的对象不会移动至老生代存储区

    答案解析 C:新生代存储区在进行垃圾回收的时候采用标记整理,找到的是所有活动对象,将它们拷贝至老生代而不是所有对象;D:新生代存储区的对象在满意一定条件之后 会被晋升至老生代对象

  • 6. 单选题[单选题]下列描述有误的是**(20分)**

    • A 在完成新生代存储区的垃圾回收时,空间会被分成二个等大小的空间,所有的活动对象都存放在 From 里
    • B 针对于老生代存储区来说,空间复制算法会造成空间的浪费
    • C 增量标记算法就是将连续的垃圾回收拆分成多个“小步”与程序运行交替完成,提高回收效率
    • D 新生代存储区进行垃圾回收时并不会造成空间上的浪费

    答案解析 D:空间复制的时候产生 From 和 To 二个等大小的空间,始终有一部分是空间不使用的,即使很小也是一种浪费,属于用空间换时间

  • 7. 单选题[单选题]下列关于内存问题描述错误的是**(20分)**

    • A 内存泄露会导致程序的使用性能随着时间增长而越来越差
    • B 如果一个应用在绝大多数的设备上运行时都表现出很糟糕的性能,则说明存在内存膨胀
    • C 如果一个应用在运行中存在频繁的卡顿则有可能是进行着频繁的垃圾回收
    • D GC 操作和程序运行是并行的,二者互相不影响

    答案解析 D:GC 操作的执行会导致应用程序的停止,等到 GC 工作结束之后应用执行才会继续

  • 8. 多选题[多选题]关于 Performance 等工具使用描述正确的**(20分)**

    • A 通过浏览器中的任务管理器可以监控到程序运行时 DOM 与 JS 堆分别占据的内存空间变化
    • B 通过 Timeline 时序图可以获取程序运行过程中 JS堆内存的走势图
    • C 通过 Timeline 时序图可以分析出当前程序运行时是否存在频繁的垃圾回收
    • D 通过 堆快照功能可以检查程序运行过程中是否存在分离 DOM