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

转载请注明来源:http://blog.csdn.net/horkychen

因为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                 41.1M      42615      9643K     22%

......

我想你已经看出一些问题了,内存开销跑到500M以上去了!

下一步,就是要分析具体是什么在耗费我们的内存,从而优化脚本执行。

Good Luck!

 

*Windows下也有vmmap, 来自大名鼎鼎的SysInternals组件, 到这里看看 [MSDN LINK].

*Windows下的Heap View在这里

 

时间: 2024-11-03 05:14:56

为你的JavaScript内存性能做个体检的相关文章

提高大容量内存性能,这是你内存大最应该做的事。

现在很多人的内存都有8G.16G甚至32G之类的超大内存,这是我们最应该考虑的是提高大容量内存性能 ,也就是让你的内存能发挥最大的功效.而不是有着大内存且没感觉到比以前低内存快多少.发生这种事就是你电脑设置得不够好. 1 根据我所知道的,可以改3个地方,下面就跟着我一一来修改吧. 3个地方都是在注册表哦,所以我们要先进入注册表编辑器,运行输入:regedit就进入了. 2 第一个要改的是LargeSystemCache的值 LargeSystemCache默认值为4,也就是4M,这个值是系统缓存

如何处理JavaScript内存泄露

几周前,我们开始写一个系列,深入探讨JavaScript和它的工作原理.我们认为了解JavaScript的构成以及它们如何协作,有助于编写出更好的代码和应用程序. 本系列第一篇重点介绍了引擎.运行时.调用栈.第二篇揭示了谷歌V8 JavaScript引擎的内部机制,并且提供了一些关于如何写出更好的JavaScript代码的建议. 本文作为第三篇,将会讨论另一个开发者容易忽视的重要主题 :内存管理.我们也会提供一些关于如何处理JavaScript内存泄露的技巧.在SessionStack,我们需要

JavaScript脚本性能优化注意事项_javascript技巧

循环是很常用的一个控制结构,大部分东西要依靠它来完成,在JavaScript中,我们可以使用for(;;),while(),for(in)三种循环,事实上,这三种循环中for(in)的效率极差,因为他需要查询散列键,只要可以就应该尽量少用.for(;;)和while循环的性能应该说基本(平时使用时)等价. 而事实上,如何使用这两个循环,则有很大讲究.我在测试中有些很有意思的情况,见附录.最后得出的结论是: 如果是循环变量递增或递减,不要单独对循环变量赋值,应该在它最后一次读取的时候使用嵌套的++

JavaScript 启动性能探究

本文讲的是JavaScript 启动性能探究, 作为 web 开发者,都知道 web 项目开发到最后,页面规模很容易变的很大. 但 加载 一个网页远不止从网线上传送字节码那么简单.浏览器下载了页面脚本之后,它还必须解析.解释和运行它们.这篇文章将深入 JavaScript 的这一部分,研究 为什么这一过程会拖慢应用程序的启动,以及 如何 解决. 过去,人们并没有花很多时间优化 JavaScript 的解析.编译步骤.我们总是期望解析器在遇到 script 标签时立即解析和执行代码,但是情况并非如

使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧_javascript技巧

我们再来聊聊Function.apply() 在提升程序性能方面的技巧. 我们先从 Math.max() 函数说起, Math.max后面可以接任意个参数,最后返回所有参数中的最大值. 比如 alert(Math.max(5,8)) //8 alert(Math.max(5,7,9,3,1,6)) //9 但是在很多情况下,我们需要找出数组中最大的元素. var arr=[5,7,9,1] alert(Math.max(arr)) // 这样却是不行的.一定要这样写 function getMa

关于ie的内存泄漏与javascript内存释放

javascript      最近做一个公司的业务系统,公司要求能尽可能的与c/s近似,也就是如c/s一样,点击文本框可以弹出此项目的相关内容,进行选择输入.     我使用了弹出窗口,然后在子窗口双击选中项目,把选中的值返回给父窗体.     在系统做完了之后,在客户使用的过程,由于客户使用的是512m的内存配置,所以在打开了30--40个窗体之后,ie的虚拟内存占用量达到近200m,从而使系统变慢,javascript的运行也变慢了.       在google搜了一下之后,才知道可能是由

网页教程:关于ie的内存泄漏与javascript内存释放

javascript|教程|网页 最近做一个公司的业务系统,公司要求能尽可能的与c/s近似,也就是如c/s一样,点击文本框可以弹出此项目的相关内容,进行选择输入. 我使用了弹出窗口,然后在子窗口双击选中项目,把选中的值返回给父窗体. 在系统做完了之后,在客户使用的过程,由于客户使用的是512m的内存配置,所以在打开了30--40个窗体之后,ie的虚拟内存占用量达到近200m,从而使系统变慢,javascript的运行也变慢了. 我使用任务管理器,打开一个弹出窗口,ie内存就增加1-3m,然后关闭

JavaScript内存管理介绍

 这篇文章主要介绍了JavaScript内存管理介绍,本文讲解了内存生命周期.JavaScript的内存分配.通过函数调用的内存分配.当内存不再需要使用时释放等内容,需要的朋友可以参考下     简介 低级语言,比如C,有低级的内存管理基元,想malloc(),free().另一方面,JavaScript的内存基元在变量(对象,字符串等等)创建时分配,然后在他们不再被使用时"自动"释放.后者被称为垃圾回收.这个"自动"是混淆并给JavaScript(和其他高级语言)

JavaScript内存泄露的4种方式及如何避免

简介 内存泄露是每个开发者最终都要面对的问题,它是许多问题的根源:反应迟缓,崩溃,高延迟,以及其他应用问题. 什么是内存泄露? 本质上,内存泄露可以定义为:应用程序不再需要占用内存的时候,由于某些原因,内存没有被操作系统或可用内存池回收.编程语言管理内存的方式各不相 同.只有开发者最清楚哪些内存不需要了,操作系统可以回收.一些编程语言提供了语言特性,可以帮助开发者做此类事情.另一些则寄希望于开发者对内存是否需 要清晰明了. JavaScript 内存管理 JavaScript 是一种垃圾回收语言