javascript - JavaScript 待机功能存储在 RAM 中还是硬盘中?

标签 javascript v8

这是一个有点奇怪的问题,我不知道足够的知识来正确地提出它,所以我会尽力而为(事实证明,在谷歌上搜索有值(value)的结果很困难):

  • 您编写了一个 Javascript 程序
  • V8(或其他解释器)编译您的脚本(我知道正在运行的解释器会极大地改变答案的结果,所以让我们坚持使用 V8)
  • 您的 Javascript 可能会占用大量可执行代码
  • V8 是否在硬盘上保留未使用的例程?或者 Javascript 解释的命令是否完全保留在 RAM 中?

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

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

最佳答案

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

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

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

一般来说,将数据交换到磁盘并不是各个应用程序的工作——而是操作系统的工作。当所有正在运行的应用程序使用的内存超过可用内存时,内核将选择一些“页面”(内存块)并将它们写入磁盘。应用程序不会注意到任何这些(除了再次需要这些页面时性能会大幅下降),并且不需要执行任何工作来支持它。因此,这部分答案不仅适用于 V8,还适用于其他 JavaScript 引擎,并且通常适用于您可能在计算机上运行的所有其他程序。

关于javascript - JavaScript 待机功能存储在 RAM 中还是硬盘中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59885755/

相关文章:

arrays - 在 node.js v11.0.0^ 中进行更改后,使用 array.sort(a, b) 的正确方法是什么?

javascript - chrome javascript 优化深度魔法

javascript - 如何在 XSLT 文档中的 javascript 中使用 AND 运算符

javascript - 根据要求实例化变量并编译 sass/less 文件

javascript - 使用 AJAX 和 JSON 将 JavaScript 数据发送到服务器并从服务器检索数据

javascript - v8 如何对哈希表中的键进行哈希处理

javascript - 独立运行 V8 Javascript 引擎

javascript - 从canvas html5存储大尺寸图像?

javascript - 我如何使用 Php 值作为轮播 slider 的 ID

javascript - 如果变量从未使用过,它会自动从内存中释放吗?