ionic-framework - ionic 2/ ionic 3-垃圾收集

标签 ionic-framework ionic2 garbage-collection ionic3

我试图更好地了解ionic2ionic3

垃圾收集如何在 ionic 系统中工作?

  • 什么时候缓存了?
  • 我们如何清除此缓存?
  • 我们如何为G.C.设置元素?
  • 我们是否甚至需要为G.C设置元素?
  • 我们可以/我们是否需要为G.C.设置页面?

  • 就像在这张图片(source)中看到的:

    enter image description here

    进入新页面时,某些内存会变为G.C。但是,内存仍然比任何视频播放之前都高得多。

    最佳答案

    好吧,我来试试看:

  • Ionic本身与GC没有多大关系,没有计划运行的任务在您身后进行清理。 ionic(或更具体地说,ionic背后的开发团队)要做的唯一事情就是设计和实现UI组件,以使其不占用过多内存并重新分配未使用的内存。尤其是使用Virtual-Scroll时,存在内存泄漏等问题。
  • 所以让我们更深入:角度!与 ionic 相同。 Angular的开发人员负责其框架使用了多少内存。但是Angular提供了一个非常有用的方法ngOnDestroy()。作为应用程序开发人员,这种方法为什么对您很重要?因为它使您有机会清理自己的身后。在销毁组件之前调用此方法,这是什么意思?您不再需要分配的对象,数组,视频元素(设置src=''然后调用load())等,就可以释放内存。 Thisthis是有关如何释放内存的不错的读物。但是,正如onDestory()docs所述,您只需要释放自动GC无法清除的内存(订阅,媒体元素等)。这使我们更上一层楼:
  • Javascript/浏览器:这是“真实” GC发生的地方。 Javascript使用了标记清除垃圾收集器(所有现代浏览器都附带一个),您可以阅读here来了解它。它会不时地运行,并释放每个无法访问/不再引用的对象,以使用delete关键字为GC显式标记一个对象。下图显示了标记和清除过程:

  • Javascript mark and sweep algorithm

    Image taken from this article, it explains how javascript memory management works in very great detail, I strongly recommend reading it.


  • 当然,您始终拥有Java/Obj-C的 native GC,它可以清理应用程序的 native 部分。
  • 关于ionic-framework - ionic 2/ ionic 3-垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46238634/

    相关文章:

    javascript - 如何使 ionic 应用程序在移动和 PC 浏览器上使用?

    javascript - 从 ionic 1 移动到 ionic 2

    mysql - 如何将ibeacon信息发布到服务器

    android - 无效数据, block 必须是字符串或缓冲区,而不是对象 - ionic 和 firebase

    ios - $cordova.geolocation 未在 IOS 中获取当前位置的经度和纬度

    java - 垃圾收集 - 为什么 c3 在此示例中不符合收集条件 (SCJP 6)

    c# - 大型数组中的内存泄漏 - 子类化 IList 会修复它吗?

    python - 垃圾收集一个类及其实例的引用?

    javascript - “ngMessages”未在 Angular js中实例化

    javascript - 如何在 Controller 中声明 $rootscope 并在另一个 Controller 中访问它