Javascript Chrome保留了函数的源代码

Javascript Chrome保留了函数的源代码,javascript,Javascript,我有一些JavaScript函数,源代码来自更大的JavaScript文件。它们是这样创建的: const function = Function("foo", "...<large JS source code>..."); const function=function(“foo”和“…”); 当查看Chrome中的内存快照时,这些函数的源代码会被保留下来,并产生大量内存开销。是否可以在JavaScript中“释放”/“删除”函数的源代码 编辑 我一直在保留函数本身,不知道是

我有一些JavaScript函数,源代码来自更大的JavaScript文件。它们是这样创建的:

const function = Function("foo", "...<large JS source code>...");
const function=function(“foo”和“…”);
当查看Chrome中的内存快照时,这些函数的源代码会被保留下来,并产生大量内存开销。是否可以在JavaScript中“释放”/“删除”函数的源代码

编辑


我一直在保留函数本身,不知道是否有可能告诉函数从内存中删除源代码。

Chrome内部使用V8 JavaScript引擎。这个引擎是一个即时JavaScript引擎,这意味着它接受您的JavaScript,并在需要时将其编译为机器代码。这是昂贵的;因此,V8将缓存编译的结果,并且(在大多数情况下)如果再次调用该函数,将重用以前编译的代码

我相信函数内存回收是由V8垃圾收集器处理的。当变量(或函数)超出范围时(在任何地方都没有对它的任何引用,包括闭包),垃圾收集器可以自由地回收该内存,包括源代码和缓存的机器代码。垃圾回收器定期运行,并将清除范围内任何内存。一般来说,您不应该试图强制自己进行垃圾收集,它应该自动进行,但是

如果删除对函数的任何引用(请记住,这包括闭包)并强制垃圾回收,您应该会看到回收的内存。使用查看函数是否已被回收(查看“堆快照”)


还有一个警告:即使内存被回收,也不一定会释放回操作系统,甚至不会被清除。许多处理大量小内存分配的应用程序会在要求操作系统提供更多内存之前,通过尝试重新使用以前分配的内存来提高性能。因此,如果您使用的是低级内存检查器,您可能仍然会看到代码挂在内存中,即使它已被垃圾收集,并且没有任何有用的引用。如果不深入研究内存,就很可能无法从内存转储中确定您的代码是否仍在内存中,因为内存泄漏,或者因为Chrome分配了内存,但在内部清理了对该内存的引用后,根本没有将其释放回操作系统。

这很奇怪,函数本身应该在调用后由garbabe收集……这听起来是个非常糟糕的主意。为什么要创建这样的函数?如果我理解正确,您澄清的问题的答案是否定的。因为JavaScript是通过实时编译器运行的,所以引擎需要在需要重新编译/重新优化源代码时保持源代码不变。您无法将源代码与函数对象分开。我认为它保留了一个标记化/解析版本,但没有完整的膨胀源代码。。。