Javascript

时间:2016-12-08 13:59:46

标签: javascript memory v8

我学习了用C / C ++编程,所以Javascript中的内存管理对我来说永远不会直观。

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

要释放全局数组对象的内存,可以array = null完成,array = []会产生相同的效果吗? (即使在我清除它之后,我还需要变量表现得像一个数组。)

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

ES6为块范围声明引入了let关键字,但单次使用let会使整个函数变慢,所以即使var仍然坚持let/const我更熟悉C / C ++。 (使用主分支内置的d8进行测试,我知道V8开发人员正在积极处理这个错误。)

尝试使用Chrome DevTools来了解我的代码内存管理,但无法确定分析器中的图形和图表实际意味着什么。

1 个答案:

答案 0 :(得分:1)

基本上,当你想自己管理你的记忆和一大堆非常技术性的东西时,你会做c ++。

如果您不想使用c#/ Java,因为有一个虚拟机管理内存。

同样适用于浏览器管理内存的JavaScript,除非您正在加载包含数千个元素的页面或编写库来显示/计算数千个数据,否则您将不会遇到任何内存问题。

请注意,当Google Chrome: 54.0.2840.99 (Official Build) m (64-bit) 取消引用现有数组时,array = []将影响新空数组的引用。由于它是null,如果你尝试使用它将无效,所以去array = null

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