gpt4 book ai didi

javascript - JavaScript 中的内存管理

转载 作者:行者123 更新时间:2023-12-03 05:28:49 25 4
gpt4 key购买 nike

我学习了 C/C++ 编程,因此 Javascript 中的内存管理对我来说从来都不是直观的。

我知道所有变量都位于堆内存中而不是堆栈内存中,因此内存操作相当昂贵。如果一个变量的所有引用都不再可访问,它可以被垃圾收集,但看起来V8不会立即进行垃圾收集? (用 --trace_gc 观察)

要释放全局数组对象的内存,可以通过 array = null 来完成,将array = []有同样的效果吗? (即使在清除变量之后,我也需要该变量表现得像数组)。

根据我的经验,StringNumber按值传递给函数,而 ObjectArray通过引用传递给函数。如果String非常大,而且函数实际上允许它安全地通过引用传递(只读取字符串),V8会这样优化吗?

ES6 引入 let block 作用域声明的关键字,但仅使用 let使得整个功能变慢,所以我还是坚持var即使let/const更接近我熟悉的C/C++。 (使用直接从 master 分支构建的 d8 进行测试,我知道 V8 开发人员正在积极解决此错误)。

尝试使用 Chrome DevTools 来了解我的代码的内存管理,但无法弄清楚分析器中的这些图形和图表的实际含义。

最佳答案

基本上,当您想要自己管理内存和一大堆技术性的东西时,您就会使用 C++。

如果你不想,你可以选择c#/Java,因为有一个虚拟机管理内存。

对于 JavaScript 来说也是如此,浏览器管理内存,除非您加载包含数千个元素的页面或编写一个库来显示/计算数千个数据,否则不会有任何内存问题。

请注意,当 array = null 取消引用现有数组时,array = [] 将影响对新空数组的引用。由于它是 null,如果您尝试使用它是行不通的,所以请使用 array=[]

如果您仍然不相信,那么只需使用适当的库来为您完成这项工作。

关于javascript - JavaScript 中的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41041294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com