JavaScript 待机功能存储在 RAM 或硬盘驱动器中吗?

Is JavaScript standby functionality stored in RAM or the hard drive?

这是一个有点奇怪的问题,我不太了解可能会正确地问它,所以我会尽力而为(事实证明很难通过谷歌搜索有价值的结果):

我想知道这一点,因为如果 JS 程序的复杂性非常大,那么大型 JS 程序占用浏览器提供的可用 RAM 分配似乎很不幸。

我知道这涉及到:如果你有这么大的程序,那你就做错了,但我喜欢尽我所能,如果我能更好地理解这一切是如何工作的,我可以更好的决定:)

(这里是 V8 开发人员。)简短回答:不,V8 不会在 运行 时间将任何未使用的东西(代码或其他)交换到磁盘。

可执行代码通常不是我们在 V8 中看到的最大内存消耗者,它往往与(非代码)数据相比相形见绌。尽管如此,代码量肯定还是很大的;几年前 V8 将其第一个(未优化的)执行层从编译器切换到解释器的原因之一是解释器的字节码比它所取代的早期非优化编译器的机器码小得多。当一个函数被优化后,它仍然被编译成机器代码;但由于通常只有相对较少的功能得到优化,因此通常只占用整体内存的低个位数百分比。

在支持它的嵌入器中(如 Chrome),V8 确实支持在 运行 之间缓存某些内容,包括代码。这是一种性能优化:如果您多次访问同一个网站,可以避免一些工作。此机制不会暂时释放任何内存,也不应该。

通常,将内容交换到磁盘不是单个应用程序的工作——这是操作系统的工作。当所有 运行ning 应用程序加起来使用的内存超过可用内存时,内核将选择一些 "pages"(内存块)并将它们写入磁盘。应用程序不会注意到任何这些(除了当再次需要这些页面时性能的大量损失)并且不需要做任何工作来支持它。因此,这部分答案不仅适用于 V8,还适用于其他 JavaScript 引擎,并且通常适用于您可能 运行 在计算机上使用的所有其他程序。