浅析JS垃圾收集机制和内存管理

这篇文章主要介绍了浅析JS垃圾收集机制和内存管理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  垃圾收集

  javascript中的垃圾收集机制很简单:找出那些不在使用的变量,然后释放他们.

    局部变量只存在在函数执行过程中,所以,当函数执行结束之后,局部变量就没有存在的必要了.但是并不是所有的变量都是那样容易判断的,所以要用一些方法来回收这些变量

    1 标记清除:

    javascript中最常用的垃圾收集方式是清除标记.当变量进入环境时,将这个变量标记为”进入环境”,当变量离开环境时,将变量标记为”离开环境”,一般来说,咱们只会清除带有离开环境标记的变量,因为已经没办法访问他们了.然后垃圾收集器来完成内存清除工作.

    2 引用计数:

    这个方法不是那么常用.引用计数的意思就是记录每个值被引用的次数,当被引用的次数减为0的时候,则说明再也没有办法访问那个值了,所以可以将它占用的内存释放.

    但是引用计数有一个问题:循环引用.举个例子:

    

function problem(){var objectA = new Object();var objectB = new Object();objectA.someOtherObject = objectB;objectB.anotherObject = objectA;}

登录后复制

    在这个例子中,在这个例子中,objectA 和objectB 通过各自的属性相互引用;也就是说,这两个对象的引用次

数都是2。在采用标记清除策略的实现中,由于函数执行之后,这两个对象都离开了作用域,因此这种相互引用不是个问题。但在采用引用计数策略的实现中,当函数执行完毕后,objectA 和objectB 还将继续存在,因为它们的引用次数永远不会是0。假如这个函数被重复多次调用,就会导致大量内存得不到回收

    为了避免这样的问题,咱们要在不使用他们的时候将他们置为null,以消除循环引用

内存管理:

   我们都知道 分配给Web浏览器的可用内存数量通常要比分配给桌面应用程序的少。这样做的目的主要是出于安全方面的考虑,目的是防止运行JavaScript 的网页耗尽全部系统内存而导致系统崩溃。内存限制问题不仅会影响给变量分配内存,同时还会影响调用栈以及在一个线程中能够同时执行的语句数量。

    因此,确保占用最少的内存可以让页面获得更好的性能。而优化内存占用的最佳方式,就是为执行 中的代码只保存必要的数据。一旦数据不再有用,最好通过将其值设置为null 来释放其引用——这个 做法叫做解除引用(dereferencing)。这一做法适用于大多数全局变量和全局对象的属性。局部变量会在 它们离开执行环境时自动被解除引用,如下面这个例子所示:

function createPerson(name){var localPerson = new Object();localPerson.name = name;return localPerson;}var globalPerson = createPerson("Nicholas");// 手工解除globalPerson 的引用globalPerson = null;

登录后复制

    解除一个值的引用并不意味着自动回收该值所占用的内存。解除引用的真正作用是让值脱离执行环境,以便垃圾收集器下次运行时将其回收。

相关推荐:

java垃圾回收机制、内存管理

JS的垃圾回收机制和内存分配

JavaScript垃圾收集机制及内存泄漏问题

以上就是浅析JS垃圾收集机制和内存管理的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2775119.html

(0)
上一篇 2025年3月8日 14:18:30
下一篇 2025年2月23日 12:38:43

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Ajax使用jsonp方式跨域获取数据详解(附代码)

    这次给大家带来Ajax使用jsonp方式跨域获取数据详解(附代码),Ajax使用jsonp方式跨域获取数据的注意事项有哪些,下面就是实战案例,一起来看一下。 jsonp的调用,今天碰到了,正好整理了一下。 $(document).ready…

    编程技术 2025年3月8日
    200
  • JS如何对组件实现动态处理

    这篇文章主要介绍了js如何对组件实现动态处理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 组件的动态添加,p的复制   对组件的动态处理是动态网页的必备技能。这种情况基本无法避免。就好比如客户需要填写表单,但…

    2025年3月8日 编程技术
    200
  • JS+ajax实现php异步提交表单

    这次给大家带来JS+ajax实现php异步提交表单,JS+ajax实现php异步提交表单的注意事项有哪些,下面就是实战案例,一起来看一下。 很多时候需要异步提交表单,当表单太多是时候,一个个getElementById变得很不实际 当然,j…

    编程技术 2025年3月8日
    200
  • 深度剖析JavaScript 设计模式:多态

    这篇文章主要介绍了深度剖析JavaScript 设计模式:多态,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 多态的含义 同一操作作用于不同的对象上,可以产生不同的解释和不同的执行结构。也就是,给不同的对象发送…

    编程技术 2025年3月8日
    200
  • 构造AJAX实现表单JSON转换的方法

    这次给大家带来构造AJAX实现表单JSON转换的方法,构造AJAX实现表单JSON转换的注意事项有哪些,下面就是实战案例,一起来看一下。 ajax提交服务器数据, 整理一下转换方法。 HTML: 登录后复制 1.表单元素转QueryStri…

    编程技术 2025年3月8日
    200
  • SpringMVC环境Ajax异步请求JSON的方法

    这次给大家带来SpringMVC环境Ajax异步请求JSON的方法,SpringMVC环境Ajax异步请求JSON的注意事项有哪些,下面就是实战案例,一起来看一下。 一 环境搭建 首先是常规的spring mvc环境搭建,不用多说,需要注意…

    2025年3月8日
    200
  • ajax读取Json数据的方法

    这次给大家带来ajax读取Json数据的方法,ajax读取Json数据的注意事项有哪些,下面就是实战案例,一起来看一下。 本文给大家分享一下,如何使用ajax读取Json中的数据。 一、基础知识 什么是json? JSON 指的是 Java…

    2025年3月8日
    200
  • js实现ajax分页(图文详解)

    这次给大家带来js实现ajax分页(图文详解),js实现ajax分页的注意事项有哪些,下面就是实战案例,一起来看一下。 本文实例讲述了js实现ajax分页的方法。分享给大家供大家参考,具体如下: Untitled Document*{mar…

    编程技术 2025年3月8日
    200
  • JS实现访问DOM对象指定节点的方法示例_javascript技巧

    这篇文章主要介绍了js实现访问dom对象指定节点的方法,结合实例形式分析了javascript针对dom元素节点属性相关操作技巧,需要的朋友可以参考下 本文实例讲述了JS实现访问DOM对象指定节点的方法。分享给大家供大家参考,具体如下: 一…

    2025年3月8日
    200
  • 常用的JS排序算法

    这次给大家带来常用的JS排序算法,使用JS排序算法的注意事项有哪些,下面就是实战案例,一起来看一下。 1.冒泡排序 var bubbleSort = function(arr) { for (var i = 0, len = arr.len…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论