当前位置: 首页 > news >正文

网站前端设计外包公司地图位置链接怎么做

网站前端设计外包公司,地图位置链接怎么做,跨境电商平台的特点,网站建设和维护方案前端面试大全JavaScript垃圾回收与内存泄漏 #x1f31f;经典真题 #x1f31f;什么是内存泄露 #x1f31f;JavaScript 中的垃圾回收 #x1f31f;标记清除 #x1f31f;引用计数 #x1f31f;真题解答 #x1f31f;总结 #x1f31f;经典真题 请介绍一下 Jav…前端面试大全·JavaScript垃圾回收与内存泄漏 经典真题 什么是内存泄露 JavaScript 中的垃圾回收 标记清除 引用计数 真题解答 总结 经典真题 请介绍一下 JavaScript 中的垃圾回收站机制 什么是内存泄露 程序的运行需要内存。只要程序提出要求操作系统或者运行时runtime就必须供给内存。 对于持续运行的服务进程daemon必须及时释放不再用到的内存。否则内存占用越来越高轻则影响系统性能重则导致进程崩溃。 也就是说不再用到的内存如果没有及时释放就叫做内存泄漏memory leak。 JavaScript 中的垃圾回收 浏览器的 Javascript 具有自动垃圾回收机制GCGarbage Collecation也就是说执行环境会负责管理代码执行过程中使用的内存。其原理是垃圾收集器会定期周期性找出那些不在继续使用的变量然后释放其内存。 但是这个过程不是实时的因为其开销比较大并且 GC 时停止响应其他操作所以垃圾回收器会按照固定的时间间隔周期性的执行。 不再使用的变量也就是生命周期结束的变量当然只可能是局部变量全局变量的生命周期直至浏览器卸载页面才会结束。局部变量只在函数的执行过程中存在而在这个过程中会为局部变量在栈或堆上分配相应的空间以存储它们的值然后在函数中使用这些变量直至函数结束而闭包中由于内部函数的原因外部函数并不能算是结束。 下面是一段示例代码 function fn1() {var obj {name: zhangsan, age: 10}; } function fn2() {var obj {name:zhangsan, age: 10};return obj; }var a fn1(); var b fn2(); 在上面的代码中我们首先声明了两个函数分别叫做 fn1 和 fn2。 当 fn1 被调用时进入 fn1 的环境会开辟一块内存存放对象 {name: zhangsan, age: 10}。而当调用结束后出了 fn1 的环境那么该块内存会被 JavaScript 引擎中的垃圾回收器自动释放 在 fn2 被调用的过程中返回的对象被全局变量 b 所指向所以该块内存并不会被释放。 这里问题就出现了到底哪个变量是没有用的 所以垃圾收集器必须跟踪到底哪个变量没用对于不再有用的变量打上标记以备将来收回其内存。 用于标记的无用变量的策略可能因实现而有所区别通常情况下有两种实现方式标记清除和引用计数。 引用计数不太常用标记清除较为常用。 标记清除 JavaScript 中最常用的垃圾回收方式就是标记清除。 当变量进入环境时例如在函数中声明一个变量就将这个变量标记为“进入环境”。 从逻辑上讲永远不能释放进入环境的变量所占用的内存因为只要执行流进入相应的环境就可能会用到它们。 而当变量离开环境时则将其标记为“离开环境”。 function test(){var a 10 ; // 被标记 进入环境 var b 20 ; // 被标记 进入环境 } test(); // 执行完毕 之后 a、b 又被标离开环境被回收。 垃圾回收器在运行的时候会给存储在内存中的所有变量都加上标记当然可以使用任何标记方式。 然后它会去掉环境中的变量以及被环境中的变量引用的变量的标记闭包。而在此之后再被加上标记的变量将被视为准备删除的变量原因是环境中的变量已经无法访问到这些变量了。 最后垃圾回收器完成内存清除工作销毁那些带标记的值并回收它们所占用的内存空间。 到目前为止IE9、Firefox、Opera、Chrome、Safari 的 JS 实现使用的都是标记清除的垃圾回收策略或类似的策略只不过垃圾收集的时间间隔互不相同。 引用计数 引用计数的含义是跟踪记录每个值被引用的次数。 当声明了一个变量并将一个引用类型值赋给该变量时则这个值的引用次数就是 1。如果同一个值又被赋给另一个变量则该值的引用次数加 1。 相反如果包含对这个值引用的变量又取得了另外一个值则这个值的引用次数减 1。当这个值的引用次数变成 0 时则说明没有办法再访问这个值了因而就可以将其占用的内存空间回收回来。 这样当垃圾回收器下次再运行时它就会释放那些引用次数为 0 的值所占用的内存。 function test() {var a {}; // a 指向对象的引用次数为 1var b a; // a 指向对象的引用次数加 1为 2var c a; // a 指向对象的引用次数再加 1为 3var b {}; // a 指向对象的引用次数减 1为 2 } Netscape Navigator3 是最早使用引用计数策略的浏览器但很快它就遇到一个严重的问题循环引用。 循环引用指的是对象 A 中包含一个指向对象B的指针而对象 B 中也包含一个指向对象 A 的引用。 function fn() {var a {};var b {};a.pro b;b.pro a; } fn(); 以上代码 a 和 b 的引用次数都是 2fn 执行完毕后两个对象都已经离开环境在标记清除方式下是没有问题的但是在引用计数策略下因为 a 和 b 的引用次数不为 0所以不会被垃圾回收器回收内存如果 fn 函数被大量调用就会造成内存泄露。在 IE7 与 IE8 上内存直线上升。 真题解答 请介绍一下 JavaScript 中的垃圾回收站机制 参考答案 JavaScript 具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JavaScript 常见的垃圾回收方式标记清除、引用计数方式。 1、标记清除方式 工作原理当变量进入环境时将这个变量标记为“进入环境”。当变量离开环境时则将其标记为“离开环境”。标记“离开环境”的就回收内存。 工作流程 垃圾回收器在运行的时候会给存储在内存中的所有变量都加上标记 去掉环境中的变量以及被环境中的变量引用的变量的标记 被加上标记的会被视为准备删除的变量 垃圾回收器完成内存清理工作销毁那些带标记的值并回收他们所占用的内存空间。 2、引用计数方式 工作原理跟踪记录每个值被引用的次数。 工作流程 声明了一个变量并将一个引用类型的值赋值给这个变量这个引用类型值的引用次数就是 1 同一个值又被赋值给另一个变量这个引用类型值的引用次数加 1 当包含这个引用类型值的变量又被赋值成另一个值了那么这个引用类型值的引用次数减 1 当引用次数变成 0 时说明没办法访问这个值了 当垃圾收集器下一次运行时它就会释放引用次数是 0 的值所占的内存。 总结 本篇文章是关于JavaScript的一道面试题后续还会持续更新HTML、CSS、JavaScript、Node.js、Vue.js、网络等前端相关面试题。如果文中出现有瑕疵的地方各位通过评论或者私信联系我我们一起进步有兴趣的伙伴可以关注订阅 前端面试题大全
http://www.hkea.cn/news/14340393/

相关文章:

  • 建站行业发展前景wordpress图片上传慢
  • 无忧主机建站的过程深圳做微商网站的公司
  • 网站建站推广上海市工程建设信息网
  • 免费网站平台推荐有那种网站么
  • 腾讯快速建站平台如何注册一个免费网站
  • 江苏建设标准网站徐州招聘网
  • 400网站建设推广个人外贸网站制作
  • 网站建设的标语2017网站seo如何做
  • 网站文章内容一键排版功能怎么做网站盈利
  • 成都网站seo诊断html做网站的设计
  • 找苏州网站建设wordpress商店如何添加商品
  • 网站运维平台建设原则旅游网站建设策划
  • 传媒公司做网站条件长宁长沙网站建设
  • 深圳网站建设ucreator合肥网站建设公司 推荐
  • 哪个小说网站版权做的好处网站建设所用系统
  • 做网站建设需要什么资质免费网址怎么申请注册
  • 单位网站及政务新媒体建设管理网页设计基础的教学目的
  • 内网网站建设所需硬件设备建设厅特种作业证件查询官网
  • 织梦网站后台管理系统做外贸那里发广告网站
  • 合肥网站建设 合肥网络推广wordpress 文章置顶不显示
  • 企业网站建设版本wordpress自动发货如何设置
  • 献县做网站广告设计公司需要资质吗
  • 黄石网站制作忘记网站后台用户名
  • 做网站盈利方式蛋糕烘焙wordpress主题
  • 网站开发价格明细内蒙古建设工程交易服务中心网站
  • 网站建设与管理基础中国互联网协会先后制定并发布了
  • 给公司网站设计天津市建设工程定额管理站网站
  • 旅游网网站建设目的自助wap建站
  • 怎样做免费网站会员wordpress如何变成中文版
  • 公司网站建设的好处什么叫网络架构