js垃圾回收机制的触发时机
我们总说垃圾回收是自动的,但是具体是什么时候触发的呢? 有两种情况。 一种是执行完一次主线程的代码,就会回收一次。 还有一种极端的情况, 就是当js占用内存过大不够的时候,会触发垃圾回收执行。
前端显示内存占用的api
其实window对象上有显示内存占用的api,只是我们平时没有太关注 在控制台输入window.performance 即可在Performance中的memory看到内存占用情况。 在node环境中,node也提供了查看内存的api:process.memoryUsage()
前端内存优化的建议:
- 尽量不要使用全局变量,如果使用了要注意手动去释放。手动释放就是在不使用以后手动把全局变量赋值为undefined或者null
- 注意闭包的使用,容易造成内存泄露。
总结:
内存分为堆和栈 ,堆内存存储复杂的数据类型,栈内存则存储简单数据类型,方便快速写入和读取数据。在访问数据时,先从栈内寻找相应数据的存储地址,再根据获得的地址,找到堆内该变量真正存储的内容读取出来。
JS 语言并不像比如 C一样需要手动分配内存和释放内存,而是有自己一套动态 GC 策略的。通常的垃圾回收机制有很多种。
前端用到的方式为标记清除法,可以解决循环引用的问题