性能优化

·

垃圾回收与常见GC算法

  • 引用计数算法

    ​ 应用引用计数器设置引用数,判断当前引用数是否为0,引用关系改变时修改引用数字,当引用数字为0时立即回收

    优点:

    • 发现垃圾时立即回收
    • 最大限度减少程序暂停,减少程序卡顿时间

    缺点:

    • 无法回收循环引用的对象
    • 时间开销大,资源消耗较大
  • 标记清除算法

    核心:分标记和清除两个阶段完成

    遍历所有对象找标记活动对象

    遍历所有对象清除没有标记对象

    回收相应的的空间

    优点:

    • 可回收循环引用的对象

    缺点:

    • 容易产生碎片化空间,浪费空间
    • 不会立即回收垃圾对象
  • 标记整理算法

    是标记清除的增强,标记阶段的操作与标记清除一致,清除阶段会先执行整理,移动对象位置

    优点:

    • 减少碎片化空间

    缺点:

    • 不会立即回收垃圾对象
  • 标记增量算法:

    在v8引擎的老生代存储区中效率优化垃圾回收时使用,将程序执行和垃圾回收时间轮询,在开始一段时间程序执行后停止程序执行,转而开始遍历对象进行标记,在之后将程序执行和标记分配不同时间段交叉进行完成增量标记,然后完成对象清除,继续执行程序

    优点: 效率高

v8引擎的垃圾回收

采用即时编译

内存设限(32bit 800M; 64bit 1.5G)

垃圾回收策略:

  • 采用分代回收思想
  • 内存分新生代、老生代
  • 针对不同对象采用不同算法

v8常用 GC算法:

  • 分代回收
  • 空间复制
  • 标记清除
  • 标记整理
  • 增量标记

v8新生代存储区垃圾回收:

  • v8内存一分为二,小空间存储新生代对象(32M/64bit | 16M/32bit)
  • 新生代:指存活时间较短的对象

回收实现:

  • 回收过程采用复制算法+标记整理
  • 新生代内存区分为两个等大小空间
  • 使用空间为From, 空闲空间为To
  • 活动对象存储于From空间
  • 标记整理后将活动对象拷贝至To
  • From与To交换空间完成释放

回收细节说明:

  • 拷贝中可能出现晋升(将新生代对象移动至老生代)
  • 一轮GC还存活的新生代需要晋升
  • To空间的使用率超过25%则晋升

v8老生代存储区垃圾回收:

  • (1.4G/64bit | 700M/32bit)
  • 老生代对象:指存活时间较长的对象

回收实现:

  • 回收过程采用标记清除+标记整理+增量标记算法
  • 先用标记清除完成垃圾空间的回收
  • 采用标记整理进行空间优化(晋升过程空间不够时)
  • 采用增量标记算法进行效率优化

回收细节对比:

  • 新生代空间换时间
  • 老生代不适合复制算法(数据过多)

Performance工具:

代码优化实例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值