JavaScript的内存和操作系统有关,64位的系统内存是1.4G,32位系统是0.7G。
为什么内存只有这么大,不是内存越大约好吗?
因为js在进行内存回收的时候,会暂停js的执行,时间大概是每回收300MB耗时0.04s,这也就意味着内存大并不能解决问题,反而会影响效率。
内存分为:新生代内训和老生代内存
老生代内存(牺牲空间换取时间):
先标记清除,然后整理碎片
新生代内存(牺牲空间换取时间):
因为新生代内存的需要频繁的进行回收,为了时间上的效率,把内存分为两个部分,每次回收的时候,都是把from里面还活着的数据全部复制到to里面,from清空。然后to又变成了下次回收的from,重复执行之前的步骤。现在我们需要的就是只需要标记数据,而不需要整理数据,这样就减少了时间
那么什么时候回执行内存回收呢?
内存只有快满的时候才会触发回收。
什么样的数据会被回收?
1、全局变量不会被回收
2、局部变量不再被引用的时候才会被回收
怎么避免占过多的暂用内存?
1、避免使用全局变量
2、如果必须要使用全局变量,那么使用完及时释放(设置为undefined 或者null)
3、大文件上传(切片上传)