带你吃透js内存

    技术2026-03-28  10

    JavaScript的内存和操作系统有关,64位的系统内存是1.4G,32位系统是0.7G。

    为什么内存只有这么大,不是内存越大约好吗?

    因为js在进行内存回收的时候,会暂停js的执行,时间大概是每回收300MB耗时0.04s,这也就意味着内存大并不能解决问题,反而会影响效率。

    内存分为:新生代内训和老生代内存

    老生代内存(牺牲空间换取时间):

    先标记清除,然后整理碎片

    新生代内存(牺牲空间换取时间):

    因为新生代内存的需要频繁的进行回收,为了时间上的效率,把内存分为两个部分,每次回收的时候,都是把from里面还活着的数据全部复制到to里面,from清空。然后to又变成了下次回收的from,重复执行之前的步骤。现在我们需要的就是只需要标记数据,而不需要整理数据,这样就减少了时间

     

    那么什么时候回执行内存回收呢?

    内存只有快满的时候才会触发回收。

    什么样的数据会被回收?

    1、全局变量不会被回收

    2、局部变量不再被引用的时候才会被回收

    怎么避免占过多的暂用内存?

    1、避免使用全局变量

    2、如果必须要使用全局变量,那么使用完及时释放(设置为undefined 或者null)

    3、大文件上传(切片上传)

     

     

    Processed: 0.012, SQL: 9