## Dart特性

Dart同时支持JIT(Just In Time,即时编译)和AOT(Ahead of Time,运行前编译)两种编译模式。

**JIT** 在运行时即时编译,在开发周期中使用,可以动态下发和执行代码,开发测试效率高,但运行速度和执行性能则会因为运行时即时编译受到影响。

**AOT** 即提前编译,可以生成被直接执行的二进制代码,运行速度快、执行性能表现好,但每次执行前都需要提前编译,开发测试效率低。

###### Flutter在开发期使用JIT编译,可以缩短产品的开发周期,例如热重载就是基于该特性。在发布期使用AOT,具有运行速度快、执行性能好的特点。

## 内存分配与垃圾回收

**Dart VM**的内存分配策略为,创建对象时只需要在堆上移动指针,内存增长始终是线性的,省去了查找可用内存的过程。

在Dart中,并发是通过Isolate实现的。Isolate是类似于线程但不共享内存,独立运行的worker。这样的机制,就可以让Dart实现无锁的快速分配。

**Dart的垃圾回收采用多生代算法**。新生代在回收内存时采用“半空间”机制,出发垃圾回收时,Dart会将当前半空间中的“活跃”对象拷贝到备用控件,然后整体释放当前空间的所有内存。回收过程中,Dart只需要操作少量的“活跃”对象,没有引用的大量“死亡”对象则被忽略,这样的回收机制很适合Flutter框架中大量Widget销毁重建的场景。

## 单线程

**Dart是单线程模型**,不存在资源竞争和状态同步的问题。这就意味着,一旦某个函数开始执行,就将执行到这个函数结束,而不会被其他Dart代码打断。

**Dart中并没有线程,只有Isolate(隔离区**)。Isolates之前不会共享内存,就像几个运行在不同进程中的worker,通过事件循环(Event Looper)在事件队列(Event Queue)上传递消息通信。

## 无需单独的声明式布局语言

- 在Flutter中,界面布局直接通过Dart编码来定义。
- Dart声明式编程布局易于阅读和可视化,使得Flutter并不需要类似JSX或XML的声明式布局语言。所有的布局都使用同一种格式,也使得Flutter很容易提供高级工具使布局更简单。
- 开发过程也不需要可视化界面构建器,因为热重载可以让我们立即在手机上看到效果。

最新文章

  1. 浅谈Margin和Padding值设置成百分数的布局
  2. iOS GCD NSOperation NSThread等多线程各种举例详解(拷贝)
  3. mybatis实战教程(mybatis in action)之二:以接口的方式编程
  4. UTF-8编码的字符串拆分成单字、获取UTF-8字符串的字符个数的代码及原理
  5. 开发错误记录3:问题 Error:failed to find Build Tools revision 23.0.2
  6. Node.js的线程和进程
  7. 【iCore3 双核心板】例程三十五:HTTP_IAP_ARM实验——更新升级STM32
  8. 寻虫记:BOM头制造的冤案,无故多出空白行
  9. maven 常见错误解决
  10. MySQL优化-一 、缓存优化
  11. 连锁反应confirm
  12. vue命令行错误处理
  13. tiny4412 --Uboot移植(4) 串口
  14. shiro源码篇 - shiro的session创建,你值得拥有
  15. Fuel 30 分钟快速安装OpenStack
  16. 20145336张子扬 《网络对抗技术》 PC平台逆向破解
  17. postman get和post结合
  18. Lua学习笔记(7): 模块
  19. linux下的系统调用函数到内核函数的追踪
  20. OPENGL架构

热门文章

  1. 在canvas中使用其他HTML元素
  2. 深入理解ES6之——代理和反射(proxy)
  3. ZooKeeper系列(五)—— ACL 权限控制
  4. Hive 系列(七)—— Hive 常用 DML 操作
  5. xss实体绕过示例
  6. css布局之居中
  7. hmac模块和hashlib模块
  8. Linux 终端命令格式
  9. iOS 视图渲染数据转CVPixelBuffer
  10. unity之中级工程师