javascript 内存管理
前言:为什么要管理内存?
浏览器端:因为内存过大会让浏览器压力过大,导致浏览器卡顿。
node端:内存如果不够,服务就会被中断。
1.栈内存 堆内存 的理解
前端项目优化必然要了解内存占比,先说说我们平时是如何使用内存的吧。
基本类型:存放在占内存。
引用类型:值存在堆内存,变量名存在栈内存,变量名的值指向堆内存的地址。
这里直接上图方便大家的理解。
2. 新生代 老生代
在64位电脑下 新生代有32M 老生代有1.4G
新生代:新生代的工作过程就是把32M平分成2个16M的储存空间,先在第一个储存,当快满的时候找到第一个里面的可执行垃圾回收的,进行回收,然后把剩下的不可回收的放在第二个储存空间,最后把第一储存空间清空,再把第二个储存空间变为第一个。这样一直循环。
老生代:64位下1.4G 32位下700M。
老生代回收分为三步:
1,标记已死变量
2,清楚已死变量
3,整理磁盘。
新生代和老生代如何转变?
1,新生代发现本次复制后,会占用超过百分之25的空间
2 这个对象已经经历过一次回收。
什么时候触发回收
1.执行完一次代码
2 内存不够的时候。
浏览器检测内存:window.performance.memory
node端检测内存:process.memoryUsage()
Node端可以设置内存- node --max-old-space-size=1000 storage.js 和node --max-new-space-size=500 storage.js
回收的时候是阻塞式的,也就是进行垃圾回收的时候会中断代码的执行。