Ionic 2/Ionic 3 - 垃圾收集

Iva*_*ers 10 garbage-collection ionic-framework ionic2 ionic3

我正在努力更好地了解ionic2ionic3.

垃圾收集如何在离子中起作用?

  • 什么得到缓存,什么时候?
  • 我们如何清除这个缓存?
  • 我们如何为GC设置元素?
  • 我们甚至需要为GC设置元素吗?
  • 我们/我们需要为GC设置页面吗?

就像在这张图片中看到的那样(来源):

在此输入图像描述

当进入新页面时,一些内存获得G.C'd.然而,记忆仍然显着高于任何视频播放前的记忆.

Dav*_*vid 9

好的,我要尝试一下这个:

  • 离子本身与GC没什么关系,没有预定的任务可以清理你身后.离子(或更具体地说是离子的开发团队)必须做的唯一事情是设计和实现他们的UI组件,方式是他们不会占用太多内存并且还会释放未使用的内存.特别是Virtual-Scroll存在内存泄漏问题等问题.
  • 所以让我们更深层次:Angular!与离子相同.Angular的开发人员负责其框架使用了多少内存.但Angular提供了一种非常有用的方法ngOnDestroy().作为应用程序开发人员,为什么这种方法对您很重要?因为它让你有机会清理自己.在组件被销毁之前调用此方法,这意味着什么?您不再需要分配的对象,数组,视频元素(设置src=''然后调用load())等等,您可以释放内存.是如何释放内存的良好读物.但是,作为提及的文档,onDestory()您只需释放未通过automic GC(订阅,媒体元素,......)清理的内存.这让我们更上一层楼:
  • Javascript/Browser:这是"真正的"GC发生的地方.Javascript使用标记和扫描垃圾收集器(所有现代浏览器随附一个),您可以在这里阅读它.它不时地运行并释放每个不可访问/不再引用的对象,以明确标记GC对象使用delete关键字.下图显示了标记和扫描过程:

Javascript标记和扫描算法

这篇文章中获取的图片,它解释了javascript内存管理如何工作非常详细,我强烈建议阅读它.

  • 当然,你总是拥有Java/Obj-C的原生GC,它可以清理应用程序的原生部分.

  • 很好的答案!我想在iOS上特别添加,因为操作系统管理RAM内存的使用,有时候一些_resources_在不再使用时不会被释放(因为操作系统知道有足够的内存仍然可用且不知道如果将来不再使用该资源).我提到这一点,因为在XCode检查器中看起来似乎存在内存泄漏,但它实际上可能根本不是内存泄漏. (3认同)