Dart語言概覽

 

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代碼打斷。oop

Dart中並無線程,只有Isolate(隔離區)。Isolates以前不會共享內存,就像幾個運行在不一樣進程中的worker,經過事件循環(Event Looper)在事件隊列(Event Queue)上傳遞消息通訊。佈局

無需單獨的聲明式佈局語言

  • 在Flutter中,界面佈局直接經過Dart編碼來定義。
  • Dart聲明式編程佈局易於閱讀和可視化,使得Flutter並不須要相似JSX或XML的聲明式佈局語言。全部的佈局都使用同一種格式,也使得Flutter很容易提供高級工具使佈局更簡單。
  • 開發過程也不須要可視化界面構建器,由於熱重載可讓咱們當即在手機上看到效果。
相關文章
相關標籤/搜索