我试图更好地了解ionic2ionic3

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

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

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

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

    进入新页面时,某些内存会变为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显式标记一个对象。下图显示了标记和清除过程:

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


  • 当然,您始终拥有Java/Obj-C的 native GC,它可以清理应用程序的 native 部分。
  • 10-07 20:25