`
liudaoru
  • 浏览: 1588389 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Javascript解析引擎&内存泄漏

    博客分类:
  • Ajax
阅读更多

本篇博客主要是整理js解析引擎相关知识点。

----------------------------------------------------------

http://blog.csdn.net/aimingoo/archive/2008/07/23/2700248.aspx

 

SpiderMonkey JavaScript引擎的源代码中,我们得知道,执行引擎并不直接执行代码,而是先将代码

文本分析(parser)成代码树,再按规则执行代码树中的指令结点(op)。指令在JS中总是确定的,例如源代码

中是FOR,那么总是JSOP_FOR*这个操作码。但是,指令所使用的参数却不是确定的,而是通过参数名绑

定到一个具体的操作数。参数名是字符串,也就是标识符;操作数则位于该代码上下文所使用的栈中。这

个栈中的操作数使用slot位置来表示。

-----------------------------------------------------------

From: http://www.blogjava.net/tim-wu/archive/2006/05/29/48729.html

常规循环引用内存泄漏和Closure内存泄漏

要了解javascript的内存泄漏问题,首先要了解的就是javascript的GC原理。

我记得原来在犀牛书《JavaScript: The Definitive Guide》中看到过,IE使用的GC算法是计数器,因此只碰到循环 引用就会造成memory leakage。后来一直觉得和观察到的现象很不一致,直到看到Eric的文章,才明白犀牛书的说法没有说得很明确,估计该书成文后IE升级过算法吧。在IE 6中,对于javascript object内部,jscript使用的是mark-and-sweep算法,而对于javascript object与外部object(包括native object和vbscript object等等)的引用时,IE 6使用的才是计数器的算法。

Eric Lippert在http://blogs.msdn.com/ericlippert/archive/2003/09/17/53038.aspx一文中提到IE 6中JScript的GC算法使用的是nongeneration mark-and-sweep。对于javascript对算法的实现缺陷,文章如是说:
"The benefits of this approach are numerous, but the principle benefit is that circular references are not leaked unless the circular reference involves an object not owned by JScript. "
也就是说,IE 6对于纯粹的Script Objects间的Circular References是可以正确处理的,可惜它处理不了的是JScript与Native Object(例如Dom、ActiveX Object)之间的Circular References。
所以,当我们出现Native对象(例如Dom、ActiveX Object)与Javascript对象间的循环引用时,内存泄露的问题就出现了。当然,这个bug在IE 7中已经被修复了[http://www.quirksmode.org/blog/archives/2006/04/ie_7_and_javasc.html]。

-------------------------------------------------------------------------

From: http://jibbering.com/faq/faq_notes/closures.html

 

js内存泄漏的四种模式:

  1. Circular References—When mutual references are counted between Internet Explorer's COM infrastructure and any scripting engine, objects can leak memory. This is the broadest pattern.

  2. Closures—Closures are a specific form of circular reference that pose the largest pattern to existing Web application architectures. Closures are easy to spot because they rely on a specific language keyword and can be searched for generically.

  3. Cross-Page Leaks—Cross-page leaks are often very small leaks of internal book-keeping objects as you move from site to site. We'll examine the DOM Insertion order issue, along with a workaround that shows how small changes to your code can prevent the creation of these book-keeping objects.

  4. Pseudo-Leaks—These aren't really leaks, but can be extremely annoying if you don't understand where your memory is going. We'll examine the script element rewriting and how it appears to leak quite a bit of memory, when it is really performing as required.

分享到:
评论

相关推荐

    【JavaScript源代码】一篇文章弄懂javascript内存泄漏.docx

    本文旨在深入解析JavaScript中的内存泄漏及其解决策略。 首先,理解内存的基本概念。随机存取存储器(RAM)是计算机存储系统的一部分,它与CPU直接交互,用于快速读写数据。在JavaScript中,内存管理并不像C语言...

    V8JavaScript引擎的PHP扩展

    V8 JavaScript引擎是一款由Google开发的高性能JavaScript和WebAssembly虚拟机,主要用于Chrome浏览器以及Node.js环境中,它以C++编写,能够快速解析和执行JavaScript代码。PHP V8扩展则是将V8引擎集成到PHP中,使得...

    微软的 JavaScript 引擎开源啦!.zip

    这个开源项目为开发者提供了灵活性,可以在自己的应用程序中集成ChakraCore,利用其高性能的JavaScript解析和执行能力。 ChakraCore的设计目标是高效、可扩展和兼容性。它采用了多线程架构,能够有效地分配任务,...

    JavaScript 语言在引擎级别的执行过程--周爱民

    当对象不再被引用时,垃圾回收器会自动释放内存,防止内存泄漏。现代引擎如V8使用了分代垃圾回收,根据对象的生命周期将其分为不同代,针对不同代的对象采用不同的回收策略,提高效率。 此外,JavaScript的异步执行...

    前端技术分享 JavaScript引擎实现 共14页.pptx

    垃圾回收机制是指JavaScript引擎自动释放不再使用的内存,以提高性能和减少内存泄露。 本文对JavaScript引擎的实现进行了详细的分析和解释,从JavaScript引擎的架构到JavaScript对象的内部机制。了解JavaScript引擎...

    简单的JS引擎

    JavaScript引擎需要管理内存,确保不再使用的对象可以被自动回收,以防止内存泄漏。简单的引擎可能实现了一种简单的垃圾回收策略,如引用计数,但现代引擎更倾向于使用更复杂的算法,如标记-清除或分代收集。 5. *...

    cpp-mJS用于CC的嵌入式JavaScript引擎

    这意味着你需要了解如何创建和释放JavaScript对象,以及如何处理可能出现的内存泄漏问题。 3. **安全**:在嵌入式环境中,安全性至关重要。`cpp-mJS` 提供了一定程度的安全控制,但作为开发者,你需要确保在执行...

    JavaScript内核系列 pdf

    解释器负责将JavaScript代码转化为机器可执行的指令,而垃圾回收则自动管理内存,避免内存泄漏。理解V8引擎的工作原理,如即时编译(JIT)和优化编译,能帮助开发者编写更高效的代码。 四、原型链与继承 JavaScript...

    Google V8 for delphi javascript 脚本引擎接口(有demo)

    3. **内存管理**:由于V8引擎和Delphi运行时分别管理内存,所以需要小心处理内存分配和释放,防止内存泄漏。通常,这会涉及到在V8中创建和管理对象的生命周期,以及在适当的时候解除绑定和释放Delphi资源。 4. **...

    JavaScript引擎v8 二进制版 for Win32

    - **内存管理**:V8引擎负责JavaScript对象的内存分配和垃圾回收,但开发者需要确保正确地创建和释放V8的Handle对象,以免引发内存泄漏。 - **异步操作**:由于JavaScript的单线程特性,V8引擎通常在主线程执行...

    javascript垃圾收集机制与内存泄漏详细解析

    在JavaScript中,常见的内存泄漏情况包括全局变量、闭包、事件监听器未解除以及DOM元素引用等。理解垃圾收集机制可以帮助开发者避免这些内存泄漏问题,确保程序高效运行。 总结来说,JavaScript的垃圾收集机制和...

    V8Android,在android上使用v8 javascript引擎.zip

    9. **错误处理和调试**:在Android上运行V8时,可能会遇到各种错误,如内存泄漏、API调用错误等。学习如何使用V8的错误处理机制和Android的日志系统进行调试是必不可少的。 10. **安全考量**:运行JavaScript代码...

    javascript内存管理详细解析

    JavaScript是一种高级语言,其内存管理由垃圾回收机制自动处理,但理解这一过程对优化代码和避免内存泄漏至关重要。 内存生命周期在所有编程语言中基本一致,包括三个步骤:分配、使用和释放。在JavaScript中,分配...

    webkit JS引擎深入分析

    - **垃圾回收器(Garbage Collector)**:管理内存资源,自动回收不再使用的对象占用的空间,减少内存泄漏的风险。 - **API接口**:提供了一套丰富的API,允许JavaScript代码访问和操作DOM树,实现页面的动态更新。 ...

    火狐js引擎

    火狐浏览器的JavaScript引擎,又称为SpiderMonkey,是Mozilla公司开发的一款高性能的JavaScript解析和执行引擎。这个引擎是火狐浏览器的核心组成部分,负责处理网页中的JavaScript代码,为用户提供动态交互和丰富的...

    高性能JavaScript + 高清+目录 PDF

    然后,它深入讲解了JavaScript的内存管理机制,如垃圾回收和内存泄漏,这对于优化性能至关重要。 书中详细讨论了函数和对象的优化策略,包括函数表达式、立即执行函数、对象属性访问和优化、以及如何利用原型链来...

    网页核心四元素内存使用及回收.pdf

    在旧版的JavaScript引擎中,这种循环引用可能导致垃圾收集器无法识别,进而引发内存泄漏。 1.4 DOM事件绑定的循环引用(闭包) 在JavaScript中,事件处理函数通常作为闭包创建,这样可以访问外部作用域的变量。但是,...

    JavaScript 程序开发手册.rar_javascript_javascript manual_javascript 手册

    10. **性能优化**:讲解如何编写高效的JavaScript代码,避免内存泄漏,理解V8引擎的工作原理。 11. **调试技巧**:如何利用开发者工具进行代码调试,定位和解决问题。 12. **安全问题**:涵盖跨站脚本攻击(XSS)...

    nodejs之VM的内存处理测试的demo

    4. **内存泄漏检测**:由于VM模块可以独立管理内存,所以它在内存泄漏检测方面提供了便利。开发者可以创建一个VM实例,运行可能引起泄漏的代码,然后检查其内存使用情况,以定位问题。 5. **资源管理**:使用`vm....

    Chrome浏览器v8引擎源代码

    V8引擎还采用了垃圾回收机制(Garbage Collection,GC)来管理内存,确保内存的有效利用和避免内存泄漏。在源代码中,你会找到V8如何执行分代垃圾回收、标记-清除、增量收集等策略的相关实现。 此外,V8引擎有一个...

Global site tag (gtag.js) - Google Analytics