日期:2014-05-16  浏览次数:20257 次

为你的JavaScript内存性能做个体检

因为JavaScript的语言特性决定了,它的内存管理更主要的是交给浏览器的JavaScript解释器来处理,这其中被广为人知是垃圾回收(Garbage Collection)机制。不过天生的限制使得JS使用的内存也需要加以控制,特别是现在使用HTML5的游戏对JS内存管理的要求也越来越高。

目前很多的资料都是关注在JavaScript的执行性能上的。如FireBug等工具都能提供相应的功能。下面是一些参考网页:

   Javascript性能分析——工具(YUI Profiler)

   JSProfiler – JS性能分析工具

   移动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