FlutterDartFlutter

Flutter中的垃圾回收机制

2019-03-21  本文已影响7人  rhyme_lph

1.介绍

Flutter主要使用Dart开发语言,在调试和发布两个版本中,Dart RunTime是始终存在,但两种版本下的构建方式有很大的差异

2.调试和发布版本下的差异

两种模式下都存在Dart RunTime,它包含了垃圾收集器,是实例化对象并变得无法访问时分配和释放内存的必要组件。

3.垃圾收集器竞技场

对于Flutter而言,会创建很多对象:例如Stateless Widget从创建到应用程序的状态发生改变或者变得不再可见时被销毁和重建,大多数对象的生命周期是短暂的,若应用程序的UI变得相对复杂,可运行至上千个小部件

对于上面而言,很多人之前认为Flutter为什么不用Java写,为什么不用Object-C写,为什么不用JavaScript写,对于这些语言真的能胜任这么频繁的创建销毁吗?

OC在早期版本中缺少较为完善的内存管理机制,需要开发者手动进行释放,在Xcode4.2之后引入了ARC(Automatic Reference Counting)机制。

javaScript 具有垃圾自动收集机制,垃圾收集器会按照固定的时间间隔,周期性地执行这一炒作,具体到浏览器的实现,也可以指定收集时间

Dart的垃圾收集器是分代的,由两个部分组成:新生代空间收集器、并行标记扫描收集器,还有一个重要的东西,就是调度器

4.总结

由上面所述,Dart的垃圾收集器方式参考了部分语言的实现,但需要注意的是,Dart的isolates拥有自己的私有堆,彼此是独立的,每个isolates运行在单独的线程中,每个ioslates的垃圾收集事件不影响其它isolates的性能,所以isolates可以避免UI出现卡顿和很好的进行频繁的回收操作,这就是dart作为Flutter的主要语言的原因之一。

参考:
1.Flutter: Don’t Fear the Garbage Collector

上一篇 下一篇

猜你喜欢

热点阅读