几个礼拜之前我们开始一系列对于JavaScript以及其本质工作原理的深入挖掘:我们认为通过了解JavaScript的构建方式以及它们是如何共同合作的,你就能够写出更好的代码以及应用。
这个系列的第一篇博客专注于介绍对于引擎,运行时以及调用栈的概述。第二篇博客近距离地检测了Google V8 引擎的内部并且提供了一些如何写出更好的JavaScript代码的建议。
在第三篇博客中,我们将会讨论另外一个关键的话题。这个话题由于随着编程语言的逐渐成熟和复杂化,越来越被开发者所忽视,这个话题就是在日常工作中使用到的——内存管理。
概述
语言,比如C,具有低层次的内存管理方法,比如malloc()
以及free()
。开发者利用这些方法精确地为操作系统分配以及释放内存。
同时,JavaScript会在创建一些变量(对象,字符串等等)的时候分配内存,并且会在这些不被使用之后“自动地”释放这些内存,这个过程被称为垃圾收集。这个看起来“自动化的”特性其实就是产生误解的原因,并且给JavaScript(以及其他高层次语言)开发者一个假象,他们不需要关心内存管理。大错特错。
即使是使用高层次语言,开发者应该对于内存管理有一定的理解(或者最基本的理解)。有时候自动的内存管理会存在一些问题(比如一些bug或者垃圾收集器的一些限制等等),对于这些开发者必须能够理解从而能够合适地处理(或者使用最小的代价以及代码债务去绕过这个问题)。