JS性能方面--内存管理

1) Delete一个Object的属性会让此对象变慢(多耗费15倍的内存)

var o = { x: ‘y‘ };
delete o.x; //此时o会成一个慢对象
o.x; //

var o = { x: ‘y‘ };
o = null;  //应该这样

2) 闭包

在闭包中引入闭包外部的变量时,当闭包结束时此对象无法被垃圾回收(GC)。

var a = function() {
  var largeStr = new Array(1000000).join(‘x‘);
  return function() {
    return largeStr;
  }
}();

3) DOM泄露

当原有的COM被移除时,子结点引用没有被移除则无法回收。

var select = document.querySelector;
var treeRef = select(‘#tree‘);

//在COM树中leafRef是treeFre的一个子结点
var leafRef = select(‘#leaf‘);
var body = select(‘body‘);

body.removeChild(treeRef);

//#tree不能被回收入,因为treeRef还在
//解决方法:
treeRef = null;

//tree还不能被回收,因为叶子结果leafRef还在
leafRef = null;

//现在#tree可以被释放了。

4)Timers计(定)时器泄露

for (var i = 0; i < 90000; i++) {
  var buggyObject = {
    callAgain: function() {
      var ref = this;
      var val = setTimeout(function() {
        ref.callAgain();
      }, 90000);
    }
  }

  buggyObject.callAgain();
  //虽然你想回收但是timer还在
  buggyObject = null;
}

5) 调试内存

Chrome自带的内存调试工具可以很方便地查看内存使用情况和内存泄露:

  在 Timeline -> Memory 点击record即可:

时间: 2024-12-13 16:49:25

JS性能方面--内存管理的相关文章

JS性能方面--内存管理及ECMAScript5 Object的新属性方法

Delete一个Object的属性会让此对象变慢(多耗费15倍的内存) var o = { x: 'y' }; delete o.x; //此时o会成一个慢对象 o.x; // var o = { x: 'y' }; o = null; //应该这样 闭包 在闭包中引入闭包外部的变量时,当闭包结束时此对象无法被垃圾回收(GC). var a = function() { var largeStr = new Array(1000000).join('x'); return function()

不考虑性能的内存管理模拟系统(假内存)的C语言实现

#include<stdio.h>           /*头文件*/ #define PROCESS_NAME_LEN 32   /*进程名长度*/ #define MIN_SLICE    10             /*最小碎片的大小*/ #define DEFAULT_MEM_SIZE 1024     /*内存大小*/ #define DEFAULT_MEM_START 0       /*起始位置*/ #define FF 1             /*首次适应*/ #defi

移动游戏加载性能和内存管理全解析 学习

https://v.qq.com/iframe/player.html?vid=o0512etq2vm&tiny=0&auto=0=

JS内存管理

JS中的内存管理,感觉就像JS中的一门副科,我们平时不太会忠实,但是一旦出现问题又很棘手,所以可以通过平时的多了解一些JS中的内存管理问题,在写代码中通过一些平时养成的习惯,避免内存泄露的问题. 不管什么语言,内存生命周期基本一致: 1.分配内存: 2.使用分配的内存(读.写): 3.不需要的时候再释放内存. C语言中,有专门的内存管理接口,像malloc()和free().JS中没有专门的内存管理接口,所有的内存管理都是自动的.JS创建变量是,自动分配内存,并在不使用的时候,自动释放该内存.这

RDD关键性能考量之 内存管理

<Spark快速大数据分析> 8.4.2 关键性能考量   内存管理 内存对Spark来说哟几个不同的用途,理解并调优Spark的内存使用方法 可以帮助优化Spark应用.在各个执行器进程中,内存有一下所列集中用途. RDD存储 当调用RDD的persist()或cache()方法时,这个RDD的分区会被存储到缓存区中. Spark会根据spark.stroage.memoryFraction限制用来缓存的内存占整个JVM堆空间的比例大小. 如果超出限制,旧的分区数据会被移出内存. 数据混洗与

王家林谈Spark性能优化第十季之全球独家揭秘Spark统一内存管理!

内容: 1.传统的Spark内存管理的问题: 2.Spark统一内存管理: 3. 展望: ==========传统的Spark内存管理的问题============ Spark内存分为三部分: Execution:Shuffles.Joins.Sort.Aggregations等等,默认情况下占用,spark.shuffle.memoryfraction默认是0.2: Storage:Persist(Canche).Large Task Result.Torrent类型的Broadcast等,默

iOS性能优化之内存管理:Analyze、Leaks、Allocations的使用和案例代码 -[转载]

最近研究代码质量检测问题,在网上找的相关资料咱是如下: 一. 一些相关概念 很多人应该比较了解这块内容了...可以权当复习复习... 1.内存空间的划分: 我们知道,一个进程占用的内存空间,包含5种不同的数据区:(1)BSS段:通常是存放未初始化的全局变量:(2)数据段:通常是存放已初始化的全局变量.(3)代码段:通常是存放程序执行代码.(4)堆:通常是用于存放进程运行中被动态分配的内存段,OC对象(所有继承自NSObject的对象)就存放在堆里.(5)栈:由编译器自动分配释放,存放函数的参数值

Android性能优化系列---管理你的app内存

 文章出处:http://developer.android.com/training/articles/memory.html#YourApp Random-access memory(RAM)在任何软件开发环境都是稀有资源,在移动操作系统物理内存有限的情况下将显得更加珍贵.虽然Android的Dalvik虚拟机优化了内存回收机制,但我们也要关注你的app的内存分配合和释放 为了垃圾回收器能回收你系统的内存,你应该避免引起内存泄露(通常由全局成员hold了对象引用),而且要在合适的时间点(如生

Java性能剖析]Sun JVM内存管理和垃圾回收

内存管理和垃圾回收是JVM非常关键的点,对Java性能的剖析而言,了解内存管理和垃圾回收的基本策略非常重要.本篇对Sun JVM 6.0的内存管理和垃圾回收做大概的描述. 1.内存管理      在程序运行过程当中,会创建大量的对象,这些对象,大部分是短周期的对象,小部分是长周期的对象,对于短周期的对象,需要频繁地进行垃圾回收以保证无用对象尽早被释放掉,对于长周期对象,则不需要频率垃圾回收以确保无谓地垃圾扫描检测.为解决这种矛盾,Sun JVM的内存管理采用分代的策略.      1)年轻代(Y