天河做网站服务,专业做网站制作自助建站系统,百度联盟广告关闭,网络运营与推广Dart语言基础知识
Dart特性#xff1a;
Dart 是少数同时支持 JIT#xff08;Just In Time#xff0c;即时编译#xff09;和 AOT#xff08;Ahead of Time#xff0c;运行前编译#xff09;的语言之一。语言在运行之前通常都需要编译#xff0c;JIT 和 AOT 则是最常见…Dart语言基础知识
Dart特性
Dart 是少数同时支持 JITJust In Time即时编译和 AOTAhead of Time运行前编译的语言之一。语言在运行之前通常都需要编译JIT 和 AOT 则是最常见的两种编译模式。
JIT 在运行时即时编译在开发周期中使用可以动态下发和执行代码开发测试效率高但运行速度和执行性能则会因为运行时即时编译受到影响。
AOT 即提前编译可以生成被直接执行的二进制代码运行速度快、执行性能表现好但每次执行前都需要提前编译开发测试效率低。
总结来讲在开发期使用 JIT 编译可以缩短产品的开发周期。Flutter 最受欢迎的功能之一热重载正是基于此特性。而在发布期使用 AOT就不需要像 React Native 那样在跨平台 JavaScript 代码和原生 Android、iOS 代码之间建立低效的方法调用映射关系。所以说Dart 具有运行速度快、执行性能好的特点。
内存分配与垃圾回收
Dart VM 的内存分配策略比较简单创建对象时只需要在堆上移动指针内存增长始终是线性的省去了查找可用内存的过程。
Dart 的垃圾回收则是采用了多生代算法。新生代在回收内存时采用“半空间”机制触发垃圾回收时Dart 会将当前半空间中的“活跃”对象拷贝到备用空间然后整体释放当前空间的所有内存。回收过程中Dart 只需要操作少量的“活跃”对象没有引用的大量“死亡”对象则被忽略这样的回收机制很适合 Flutter 框架中大量 Widget 销毁重建的场景。
单线程模型
Dart 中并没有线程只有 Isolate隔离区。Isolates 之间不会共享内存就像几个运行在不同进程中的 worker它们通过事件循环Event Looper在事件队列Event Queue上传递消息通信。所以如果想要在 Dart 中实现并发是可以通过 Isolate 实现的。Isolate 的这种类似于线程但不共享内存独立运行的 worker的机制就可以让 Dart 实现无锁的快速分配。
无需单独的声明式布局语言
Dart 声明式编程布局易于阅读和可视化使得 Flutter 并不需要类似 JSX 或 XML 的声明式布局语言。所有的布局都使用同一种格式也使得 Flutter 很容易提供高级工具使布局更简单就突出一个上手简单。