测试代码如下:

<html>
<script>
var count = 0;
var number = 1000;
for (var i = 0; i < 900; i++) {var buggyObject = {callAgain: function() {var ref = this;var val = setTimeout(function() {ref.callAgain();var newArray = new Array();if( count > 3)number = 10000;for( var a = 0; a < number; a++)newArray[a] = a;console.log("called");count++;}, 1000); // end of val declaration} // end of call again} // end of object declaration
}
buggyObject.callAgain();
</script>
</html>

通过tab timeline观测到在第3900ms时,系统有一个garbage collection的operation, 总共回收内存425k:

garbage collection能够生效的原因是因为在每次timer trigger并且执行完毕后,当前execution environment里的局部变量newArray 引用计数为0,因此可以被回收:

如果将该定义成局部变量的array改成全局变量,则GC不会再发生:

<html>
<script>
var count = 0;
var number = 1000;
var globalArray = [];
for (var i = 0; i < 900; i++) {var buggyObject = {callAgain: function() {var ref = this;var val = setTimeout(function() {ref.callAgain();if( count > 3)number = 10000;for( var a = 0; a < number; a++)globalArray.push(a);console.log("called");count++;}, 1000); // end of val declaration} // end of call again} // end of object declaration
}
buggyObject.callAgain();
</script>
</html>

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

利用chrome的Timeline观测系统的内存回收逻辑相关推荐

  1. Chrome开发者工具之JavaScript内存分析

    为什么80%的码农都做不了架构师?>>>    内存泄漏是指计算机可用内存的逐渐减少.当程序持续无法释放其使用的临时内存时就会发生.JavaScript的web应用也会经常遇到在原生 ...

  2. 前端性能优化必备技能 - 利用 Chrome Dev Tools 进行页面性能分析

    背景 我们经常使用 Chrome Dev Tools 来开发调试,但是很少知道怎么利用它来分析页面性能,这篇文章,我将详细说明怎样利用 Chrome Dev Tools 进行页面性能分析及性能报告数据 ...

  3. 前端性能优化之利用 Chrome Dev Tools 进行页面性能分析

    背景 我们经常使用 Chrome Dev Tools 来开发调试,但是很少知道怎么利用它来分析页面性能,这篇文章,我将详细说明怎样利用 Chrome Dev Tools 进行页面性能分析及性能报告数据 ...

  4. linux kernel内存回收机制

    http://www.wowotech.net/linux_kenrel/233.html 无论计算机上有多少内存都是不够的,因而linux kernel需要回收一些很少使用的内存页面来保证系统持续有 ...

  5. Problem 64 如何设置Linux系统内存回收的阀值?

    Problem 64 如何设置Linux系统内存回收的阀值? Ans: Linux内核的策略是最大程度的利用内存cache 文件系统的数据,提高IO速度,虽然在机制上是有进程需要更大的内存时,会自动释 ...

  6. JVM自动化的内存分配与内存回收

    如何区分一个C++程序员和Java程序员?答案是看他吃饭完收不收拾碗筷,反正我是不收拾,哈哈哈哈哈哈. Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回 ...

  7. 转.net内存回收与Dispose﹐Close﹐Finalize方法

    一. net的对象使用一般分为三种情况﹕ 1.创建对象 2.使用对象 3.释放对象 二.创建对象 1.创建对象实际分为两个步骤﹕变量类型宣告和初始化对象 2.变量类型宣告(declare),如﹕ Fi ...

  8. linux内存使用监控,如何利用Bash脚本监控Linux的内存使用情况

    如何利用Bash脚本监控Linux的内存使用情况 发布时间:2020-09-13 14:36:53 来源:脚本之家 阅读:114 作者:Magesh Maruthamuthu 栏目:服务器 前言 目前 ...

  9. JVM实战与原理---内存回收策略

    JVM实战与原理 目录 内存回收策略 1. 堆的划分 2. 判断对象是否存活的算法介绍 2.1 引用计数算法 2.2 可达性分析算法 3. 可回收的内存区域清理的算法介绍 3.1 标记-清除算法 3. ...

最新文章

  1. Python画出心目中的自己
  2. (006) java后台开发之基本数据类型
  3. style=background-image: url(__HOMEPAGE__/views/IMJ2V2/images/banner2.jpg)
  4. LeetCode-剑指 Offer 10- I. 斐波那契数列
  5. 地球上环境最恶劣的数据中心
  6. unix基础之改变文件权限
  7. 你可以保持沉默,但你所说的一切都将成为呈堂证供——浅谈Azure WORM保护
  8. 前端学习(981):jquery入门
  9. linux内存分配器类型,内核早期内存分配器:memblock
  10. ad域用户和计算机搭建,Windows Server 6分钟搭建AD域
  11. NLog 在winform和asp.net下使用快速攻略 .
  12. zzulioj1039答案C语言,ZZULIOJ 1037~1045(C语言)
  13. 开源计算机辅助翻译(CAT)软件OmegaT快速上手指南
  14. 获取网站图标icon
  15. 由内而外全面造就自己
  16. Axure-中继器的使用
  17. 购物车里看中国:淘宝发布18年18件“时代宝贝”
  18. 2019计算机电源海关征税,回国华人注意!2019中国海关严打:这些东西千万别带了!...
  19. Vertex Cover SCU - 4439
  20. 登陆网上邻居授权共享文件夹没有弹出登陆窗口解决办法

热门文章

  1. linux中的opencv多版本共存切换的问题
  2. org.hibernate.PersistentObjectException: detached entity passed to persist
  3. 6月21 百度文本编辑器
  4. poj-1979 dfs
  5. Android注解学习(2)
  6. Html5 postMessage
  7. python cgi打印html代码
  8. 最优化导论(part1)--求解原问题的对偶问题
  9. 探索Julia(part10)--自定义函数
  10. 《自卑与超越》读书笔记(part2)--生活的不确定性正是我们希望的来源