v8引擎 - 内存

作者: JX灬君 | 来源:发表于2021-08-04 00:09 被阅读0次

1. 在node中查看内存

proces.memoryUsage()

rss -> 分配堆内存大小
heapTotal -> 堆内存占用大小
heapUsed -> 堆内存中所有变量内存占用大小(heapTotal的子集)
external -> 进程使用到的系统链接库所占用的内存
arrayBuffers -> 内存之中的一段二进制数据

image.png

2. 通过浏览器查看内存

window.performance

jsHeapSizeLimit -> js堆内存限制为多大
totalJSHeapSize -> js变量用了多少内存
usedJSHeapSize -> js堆内存已经用了多少


image.png

3. 让内存溢出


// 查看内存占用情况
getMemory = () => {
let memory = process.memoryUsage()
let format = (bytes) => ${(bytes / 1024 / 1024).toFixed(2)}MB;
console.log(heapTotal:${format(memory.heapTotal)}\theadUsed:${format(memory.heapUsed)});
}
let count = 0
let useMem = () => {
// 初始化一个超大的数
let size = 20 * 1024 * 1024
let arr = new Array(size)
console.log(count ++ );
return arr
}
// 定义一个全局的变量来接收超大的数组
let total = []
for (let i = 0; i < 30; i++) {
getMemory()
total.push(useMem())
}
console.log('success');


循环25次后,内存在4195.36MB爆掉。

image.png

4. 解除内存限制(一般用于已知的需要大文件上传或者占用大内存node服务的情况)

新生代内存拓展:max-new-space-size=1024;// 单位KB
老生代内存拓展:max-old-space-size=4096;// 单位MB
让内存溢出的任务继续执行:

node --max-old-space-size=6096 test.js  

解除限制到6096MB后代码成功执行。


image.png

5.变量处理

  • 内存主要就是存储变量等数据的
  • 局部变量当程序执行结束,且没有引用的时候就会随着消失。
  • 全局对象会始终活到程序运行结束
  • 内存优化体现:
    1. 减少全局变量,用局部变量或者模块化的思想
    2. 模块优化,例如vue2.0(new Vue())到 vue3.0(createApp()) (摇树tree shaking优化)
    3. vite打包用rollup,因为rollup tree shaking优化更优秀。
  • 内存优化技巧
    尽量不要定义全局变量
    全局变量记得销毁掉
    有匿名自执行函数变全局为局部
    闭包引用不需要使用时要销毁

相关文章

  • 2019-05-30

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

  • 如何避免内存泄漏 - 2023-02-18

    V8引擎的内存限制 虽然V8引擎帮助我们实现了自动的垃圾回收管理,解放了我们勤劳的双手,但V8引擎中的内存使用也并...

  • V8 内存管理和垃圾回收机制总结

    这篇文章主要介绍 V8 的内存管理和垃圾回收知识。 V8 内存管理及垃圾回收机制浅析 由于 V8 引擎的原因,No...

  • V8 GC机制

    这篇文章主要介绍 V8 的内存管理和垃圾回收知识。 V8 内存管理及垃圾回收机制浅析 由于 V8 引擎的原因,No...

  • v8引擎的垃圾回收

    v8引擎的垃圾回收机制 如何查看node内存使用情况? v8的内存分类 堆内存 // 对象、字符串、闭包新生代内存...

  • 优化你的内存

    这篇文章主要介绍 V8 的内存管理和垃圾回收知识。(总结来自网易课堂) V8引擎内存回收机制 为什么我们要关注内存...

  • 认识V8

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

  • 从V8的内存管理算法出发-教你如何管理内存

    @[toc] 导语 什么是V8? V8 js运行的引擎(类似 java运行在jvm上) 为什么要关注内存? 防止页...

  • V8引擎的内存管理

    在本章中,我们将介绍用于ECMAScript和WebAssembly的V8引擎的内存管理,这些引擎用于NodeJS...

  • 【图解篇】前端内存管理

    前端为什么要关注内存 防止占用内存过大,造成页面卡顿,甚至无响应 Node.js 使用 V8 引擎,内存管理对于服...

网友评论

    本文标题:v8引擎 - 内存

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