Javascript 正在分配的内存

Javascript 正在分配的内存,javascript,memory,memory-management,Javascript,Memory,Memory Management,通过使用Chrome开发工具,我发现正在分配数组和对象。我在代码中查找明显的[],{}和新的。但是没有。我已经检查了创建新的[],{},新的的函数,并查看了这些函数的使用位置,我学会了不使用它们。那么,如何分配内存呢 这对我来说是个问题,因为每次GC启动时,它都会阻塞主循环,动画变得不一致。过分担心内存分配是徒劳的。内存将分配给所有内容、变量、数组、对象等。如果不使用变量或对象,javascript将无法完成很多工作,但是,内存分配实际上不是javascript脚本的领域。无论发生什么情况,任何

通过使用Chrome开发工具,我发现正在分配数组和对象。我在代码中查找明显的
[]
{}
新的
。但是没有。我已经检查了创建新的
[]
{}
新的
的函数,并查看了这些函数的使用位置,我学会了不使用它们。那么,如何分配内存呢


这对我来说是个问题,因为每次GC启动时,它都会阻塞主循环,动画变得不一致。

过分担心内存分配是徒劳的。内存将分配给所有内容、变量、数组、对象等。如果不使用变量或对象,javascript将无法完成很多工作,但是,内存分配实际上不是javascript脚本的领域。无论发生什么情况,任何javascript都会使用一定程度的内存。事实上,我想说的是,如果你已经“学会了避免使用”对象和数组,那么你已经得到了错误的信息或者学到了错误的教训

更重要的是避免循环引用,避免每个作用域过多的内存消耗,并且通常避免使用紧循环和其他不良做法锁定浏览器线程。例如,在
For
循环中,避免重新计算
For
声明中的限制:
For(var x=1;x
应该是
var max=myString.length;对于(var x=1;x
。即使这样的优化(在大多数情况下是微优化)对javascript开发人员来说也不是非常关键的,因为浏览器正在处理总体内存分配/消耗以及范围外引用的垃圾收集


有关避免泄漏的实践的更多信息,请参阅本文:(或类似的其他文章)。否则,只要不泄漏内存,任何脚本都会分配/使用一定程度的内存;这是不可避免的。考虑到现代PC有千兆字节的可用内存,你的脚本所使用的微不足道的千字节甚至兆字节的内存并没有多大影响-这就是内存的用途,使用它。

过分担心内存分配是徒劳的。内存将分配给所有内容、变量、数组、对象等。如果不使用变量或对象,javascript将无法完成很多工作,但是,内存分配实际上不是javascript脚本的领域。无论发生什么情况,任何javascript都会使用一定程度的内存。事实上,我想说的是,如果你已经“学会了避免使用”对象和数组,那么你已经得到了错误的信息或者学到了错误的教训

更重要的是避免循环引用,避免每个作用域过多的内存消耗,并且通常避免使用紧循环和其他不良做法锁定浏览器线程。例如,在
For
循环中,避免重新计算
For
声明中的限制:
For(var x=1;x
应该是
var max=myString.length;对于(var x=1;x
。即使这样的优化(在大多数情况下是微优化)对javascript开发人员来说也不是非常关键的,因为浏览器正在处理总体内存分配/消耗以及范围外引用的垃圾收集


有关避免泄漏的实践的更多信息,请参阅本文:(或类似的其他文章)。否则,只要不泄漏内存,任何脚本都会分配/使用一定程度的内存;这是不可避免的。考虑到现代PC有千兆字节的可用内存,你的脚本的微不足道的千字节甚至兆字节的内存使用并没有多大影响-这就是内存的用途,可以使用它。

我的问题是GC启动,破坏了一个完美流畅的游戏。但是知道内存实际上是如何分配的是件好事。ThanksGC因浏览器而异,对于脚本来说应该是完全不透明的。事实上,没有办法从javascript手动触发或以其他方式与GC交互——GC的存在是javascript甚至“不知道”的。大多数浏览器在方便的情况下运行GC,而浏览器对前端活动(如执行脚本)的要求不高或较低。如果存在奇怪的性能问题,请查看您的代码,而不是GC。您是说,由于主循环GC无法相应地工作,因此内存会堆积,直到它别无选择,只能启动为止?如果您强制执行一个永无止境的递归循环,那么是的,浏览器可能会延迟GC,直到它变得至关重要。使用
setTimeout
给一些喘息的空间可能比一个恒定的循环要好。超时不像直接递归函数或循环那样严格,如果浏览器忙于其他事情(如GC),则允许延迟触发超时,而永无止境的for循环不会被轻易中断。记住,GC只需要几毫秒就可以完成它需要做的事情。使用
setTimout
我可以得到同样的效果。循环是一个函数,
setTimout
调用该函数,但内存仍在增长,然后GC开始工作。但从你所说的来看,这是很自然的,因为实际上所有的东西都分配给了内存。我所要做的就是给GC一些时间,让它花上几毫秒来清理,或者减少分配的数量。我的问题是GC启动了,破坏了一个完美的游戏。但是知道内存实际上是如何分配的是件好事。ThanksGC因浏览器而异,对于脚本来说应该是完全不透明的。事实上,无法手动触发或以其他方式与G交互