美文网首页
内存泄漏

内存泄漏

作者: 灯不梨喵 | 来源:发表于2018-01-03 23:29 被阅读0次

    什么是内存泄漏

    程序的运行需要内存,最简单的小白查看方法,一个是任务管理器,另一个是360加速小火箭(微笑
    当内存占用率高的时候,电脑就会很卡,甚至还会死机崩溃,或者你先崩溃
    为了维持良好的运行状态,我们当然要清理掉一些不用的程序,不要让它占用内存,站着茅坑不拉*
    那这些不用的程序被占着茅坑的情况,就叫做内存泄漏(捂鼻子

    垃圾回收机制

    js目前的机制是引用计数机制
    可以想象一下假设电脑里面有一张表,上面登记了各种资源(通常是各种值)的引用次数
    当某一值的引用次数是0,就表示这个值不再用到了,因此可以将这块内存let it go。

    左下两个游离的就是引用值为0
    如果一个值不再需要了,引用数却不为0,垃圾回收机制无法释放这块内存,从而导致内存泄漏。
    var a=[1,2,3]//引用+1
    a = null;//解除引用
    

    怎么看内存泄漏

    阮一峰老师说了

    突然想起来weakmap和weakset

    说起引用 有没有想起weakmap和weakset里面有关引用的说明:
    WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。
    我们在这里温习一下weakmap和weakset的定义和特点:
    WeakSet 结构与 Set 类似,也是不重复的值的集合,它与 Set 有两个区别
    。首先,WeakSet 的成员只能是对象,而不能是其他类型的值。其次,WeakSet 中的对象都是弱引用。
    WeakMap与Map的区别有两点。首先,WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名。其次,WeakMap的键名所指向的对象,不计入垃圾回收机制。
    从以上的定义可以看出,weakset和weakmap都限制了成员的范围,必然与对象有关联,其次它们都是弱引用。可以看出weakset和weakmap是为了防止内存泄漏量身打造的数据结构,在恰当的实际,我们运用它们可以有效节省内存。

    相关文章

      网友评论

          本文标题:内存泄漏

          本文链接:https://www.haomeiwen.com/subject/kvapgxtx.html