javascript性能分析

1、存储单位:1GB = 1024MB, 1MB=1024KB,1KB=1024B,1B=8bit,1bit = 0/1。4B区分的最大数是(2^8)^4 = 2^32 = 4294967296 ,约42亿

2、js的标量一般放在栈区中,如字符串和数字,对象放在堆区中。一个变量引用标量值时,会先查找这个标量在栈区有没有,没有则创建,然后返回引用,这个引用占用内存一般是4B大小。

3、数组检验:创建1个空数组,开始一个10000次的循环,再内嵌一个10000次的循环用于新建一个内容都为2的数组,然后放进该数组。执行完,通过浏览器自带任务管理器可以查看,新增内存占用约450MB,计算得一个数占4B,索引约0.7B,将内容换成任意长的一个字符串,占用不变。通过将内容换成一个变量,这个变量是new Number(2)创建的数字对象,占用依旧不变。换成不一样的浮点数,如10000 * i + j + 0.55,则内存直接翻倍,可见浮点数占用8B,v8引擎对整数做了优化。  到这里可以知道占用内存大小  引用 = 整数 = 已存在的任意字符串 = 已存在的浮点数 = 4B,数组索引0.7B。 若将内容换成 10000 *  i + j + '',则内存直接爆炸,超过8G。单个字符,因为是utf-8编码,所以一般为2B,存储时ASCII只占1B,所以浏览器控制台输出长字符串时显示的大小一般大了一倍。   可知6万长,内容为2万的长的0数组的数组占用内存约5.25G(每长度4.7B),转成json字符串存储占约2.21G(每长度为1数字加逗号 * 1 =  2B,若为字符串还要加两个1B的冒号  )。  前面是小长度数组情况,当是单个数组很长时,索引将占4B大小。

4、4294967295也是js数组的最大长度,长度超出或length超出就会报错invalid array length。但是经过我实测(不断push),实际上,浏览器里数组最大长度是112813858,(1亿),若先申请长度,再赋值,还小于这个长度。这个限制来自v8的对单个堆1Gb最大大小的限制,通过选项,例如--max-heap-size, --max_old_space_size, --max-semi-space-size,是不能够解决的,这个问题早在2014年就被提出在这https://bugs.chromium.org/p/v8/issues/detail?id=3505。字符串的最大大小也是1gb左右

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值