浅谈javascript性能-管理内存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈javascript性能-管理内存相关的知识,希望对你有一定的参考价值。

上次说到,javascript脚本到底应该放在哪里?用什么用处?

以下2点:

  1. html、Body部分中的JS会在页面加载的时候执行。即-用户触发一个事件的时候执行的脚本。eg:onload事件...
  2. 在Html、Head部分中的JS会在被调用的时候执行。即-常被用来生成页面的内容。

总而言之:将Javascript标识放置<head>...</head>在头部中间,此时,*.js文件的提前调用;也就是说代码放在<head>区域载入的时候,就同时载入了代码,你再<body>区域调用时不需要在加载代码,速度提高了,当运行很大很复杂的程序时,就可以看出了。

墨水多了,总是想一股脑倒出来。镇定一下情绪与思路,还是想想,慢慢来呗...

性能篇之-管理内存

先小白一下,一说到内存,这里说的是堆内存。话说什么是堆内存?对了,应该这样解释一下子,先说一下计算机的内存分配方式:

一、内存分配方式

1、全局变量和静态变量(static变量),是由编译器自动分配和释放的,初始化的全局变量和静态变量放在同一块内存区中,未初始化的全局变量和静态变量则放在相邻的另外一块内存区中。

2、栈,是由编译器自动分配和释放的,主要是函数体的地址,参数和局部变量,静态变量不包含其中,操作方式类似于数据结构中的栈。

3、堆,是由程序员手动完成申请和释放的,像malloc和new,程序员没有手动释放的话,当程序结束时由系统释放没有释放的空间,其实现方式与数据结构中的堆完全不同,此时的堆的实现方式有些类似于数据结构中的链表。

4、程序代码区,用于存放程序的二进制代码的空间。

5、文字常量区,像常量字符串等存放在这里,程序结束后由系统释放。

综上:以堆的形式所呈现或者进行分配的内存的方式简称堆内存(自己表述,不喜勿喷)技术分享

总所周知;chrome浏览器的V8引擎意气风发,大有气吞山河之势。在V8中所有的Javascript对象都是由『堆』的进行内存分配工作的,我们声明变量时,V8就会在堆内存中分配一部分给变量,如果不够怎么办,继续问堆内存要啊,这样,V8就会继续分配内存,直到达到内存上限。普及一下,V8的堆内存的大小上限,64位操作系统的是1464MB,约1.4GB,然后32位操作系统的上限是732MB,约合0.7GB.相形见绌了吧!

说到正题,管理内存之-解除引用→适用于大多数全局变量和全局对象的属性,局部变量会在他们离开执行环境时自动被解除引用。

说那么多还不如举个例子,eg:

function creatP(name){
  var localP = new Object();
  localP.name = name;
  return localP;          
}
  var globalP = createP("Nick");
  // 手工解除globalP的引用
  globalP = null;

  注:解除引用的真正作用是让值脱离执行环境,以便垃圾回收器下次运行时将其回收。

顺便说一下,JS基本数据类型的变量存放的是基本数据类型的实际值;而引用类型的变量保存对它的引用,即指针。

基本数据类型(SBUNN):String、Boolean、Undefined、Number、Null;

引用数据类型(FOA):Function、Object、Array 

以上是关于浅谈javascript性能-管理内存的主要内容,如果未能解决你的问题,请参考以下文章

Android性能调优篇之内存泄露

朝花夕拾Android性能篇之Android进程管理机制

Android性能调优篇之探索JVM内存分配

浅谈Chrome V8引擎中的垃圾回收机制

JavaScript 中的性能内存管理

浅谈SQL Server 对于内存的管理