【问题标题】:Ionic 2 / Ionic 3 - Garbage CollectionIonic 2 / Ionic 3 - 垃圾收集
【发布时间】:2017-09-16 20:13:03
【问题描述】:

我正在努力更好地了解ionic2ionic3

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

  • 什么时候被缓存?
  • 我们如何清除这个缓存?
  • 我们如何为 G.C. 设置元素?
  • 我们还需要为 G.C 设置元素吗?
  • 我们可以/是否需要为 G.C. 设置页面?

就像在这张照片中看到的那样 (source):

当转到新页面时,一些内存会被 G.C'd。但是,内存仍然比播放任何视频之前高得多。

【问题讨论】:

标签: ionic-framework ionic2 garbage-collection ionic3


【解决方案1】:

好的,我要试试这个:

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

图片取自this article,它非常详细地解释了javascript内存管理的工作原理,我强烈 推荐阅读。

  • 当然,您始终拥有 Java/Obj-C 的本机 GC,它会清理应用程序的本机部分。

【讨论】:

  • 不错的答案!我想特别在 iOS 上添加这一点,因为操作系统管理 RAM 内存的使用,有时某些 resources 在不再使用时不会被释放(因为操作系统知道有很多内存仍然可用,并且不知道该资源将来是否会再次使用)。我提到这一点是因为 XCode 检查器中似乎存在内存泄漏,但实际上可能根本不是内存泄漏。
  • 感谢您的加入,很高兴知道!让我想起另一个出现在 android-devices 上的“现象”,也与设备清理机制有关:当 android 设备的 (RAM) 内存不足时,您的 cookie、localstorage(基本上所有不是持久存储的东西)可能会得到删除 - 这也是为什么会话 cookie 对于混合应用程序来说是一个非常糟糕的主意。 iOS 设备也有类似的清洁过程,即当您在应用图标下方看到“清洁...”标签时。
猜你喜欢
  • 2011-01-21
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多