转载请注明来源:http://blog.csdn.net/horkychen
因为JavaScript的语言特性决定了,它的内存管理更主要的是交给浏览器的JavaScript解释器来处理,这其中被广为人知是垃圾回收(Garbage Collection)机制。不过天生的限制使得JS使用的内存也需要加以控制,特别是现在使用HTML5的游戏对JS内存管理的要求也越来越高。
目前很多的资料都是关注在JavaScript的执行性能上的。如FireBug等工具都能提供相应的功能。下面是一些参考网页:
Javascript性能分析——工具(YUI Profiler)
移动Web应用程序开发 高性能JavaScript篇 (三) JavaScript 加载解析和部署
javascript 内存泄露工具使用 (内存泄露和内存消耗不算是一个话题,但也可以做为参考)
目前,确实只有Chrome的开发工具,可以获取当前脚本占用的堆(Heap)的状况。在Profiles选择对Heap进行快照分析就可以了。
(下图显示的是某个对象占用17M多的内存)
详细的说明,请点这里。
对于其它的浏览器可以使用vmmap对浏览器查看其总体的内存状况:
以下是Mac OS下vmmap对Safari获取结果 (执行是vmmap pid. 这个pid是Safari运行叫起的另一个进程):
REGION TYPE VIRTUAL
=========== =======
...
JS JIT generated code 256.0M
JS JIT generated code (reserved) 768.0M reserved VM address space (unallocated)
JS VM register file 4096K
JS garbage collector 34.6M
MALLOC 625.0M see MALLOC ZONE table below
...
注意:如果其中JS garbage collector后面数字比较大,表示脚本里有可能存在较多的闭包使得GC不能及时发挥作用。
再使用heap指令,可以看到Malloc Zone中的状况:
VIRTUAL ALLOCATION BYTES
MALLOC ZONE SIZE COUNT ALLOCATED % FULL
=========== ======= ========= ========= ======
JavaScriptCore FastMalloc_0x7fff7d8b8148 534.1M 2863601 307.6M 57%
DefaultMallocZone_0x10b033000 41.1M 42615 9643K 22%
......
我想你已经看出一些问题了,内存开销跑到500M以上去了!
下一步,就是要分析具体是什么在耗费我们的内存,从而优化脚本执行。
Good Luck!
*Windows下也有vmmap, 来自大名鼎鼎的SysInternals组件, 到这里看看 [MSDN LINK].
*Windows下的Heap View在这里。