JS中内存的存储方式
1、栈内存
栈内存在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。
对于数据的简单类型、都放入栈内存,直接在内存写入。也用于变量的执行顺序。栈内存的空间较小。
在C和C++底层语言中,内存的使用是需要代码申请的。
栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。
2、堆内存
堆内存是区别于栈区、全局数据区和代码区的另一个内存区域。堆允许程序在运行时动态地申请某个大小的内存空间。
JavaScript放入引用类型存贮到堆里面,然后把他的地址放在栈内存里面,类似key \value的形式、
垃圾回收
必要性
由于字符串、对象和数组没有固定大小,所有当他们的大小已知时,才能对他们进行动态的存储分配。JavaScript程序每次创建字符串、数组或对象时,解释器都必须分配内存来存储那个实体。只要像这样动态地分配了内存,最终都要释放这些内存以便他们能够被再用,否则,JavaScript的解释器将会消耗完系统中所有可用的内存,造成系统崩溃。
简称GC,是内存回收机制、是堆内存达到一定使用门槛会进行回收,或定期回收。回收原则是谁的引用数为零。就摧毁谁。
更好的解释垃圾回收的文章:https://www.cnblogs.com/zhwl/p/4664604.html