記錄學習內容。
主要是看網路上的文章和影片,做些紀錄。
內容可能有錯誤。
看一下Flutter的維基介紹:
Flutter
Flutter是使用Dart語言編寫,並利用該語言的許多進階功能。
Flutter是一個由Google開發的開源行動應用軟體開發套件
Flutter在Dart虛擬機器中執行,該虛擬機器具有即時編譯執行引擎。
想來了解及時編譯是什麼:
即時編譯
單看維基看不太懂,在回去複習一下java:
https://ithelp.ithome.com.tw/articles/10213590
Core Java Tutorial 07 - what's a Java Virtual Machine ( why Java is a platform independent language)
2. Why and How Java is platform independent
整理:
1
微處理器
微處理器英文叫 microprocessor
分了幾種應用:
我們電腦裡的就叫做中央處理器 (Central Processing Unit,縮寫:CPU)
、還有玩遊戲的圖形處理器(Graphics Processing Unit,縮寫:GPU;又稱顯示卡)
中央處理器像是有intel處理器、AMD處理器 。因為每家廠商的設計都不同,所以組語和機器語言的設計都不同。
2
Java的「一次編寫,到處執行」的跨平台特性:
意思就是:
我們平常寫的java 會先編譯(compile)成另一種語言(類似組合語言、中間語言之類的,java的稱為Java bytecode)
然後這個java bytecode 不管放到哪個作業系統 ,都可以透過不同的jvm,直譯 (interpreter),執行程式。
關於直譯器:
直譯器
直譯器(interpreter),是一種程式,能夠把程式語言一行一行直接轉譯執行。直譯器的程式運行速度比較緩慢。它不會一次把整個程式轉譯出來,而是每轉譯一行程式敘述就立刻執行,然後再轉譯下一行,再執行,如此不停地進行下去。
所以寫好一次HelloWorld.java 經過編譯成HelloWorld.class 。
這一個HelloWorld.class檔案 可以帶到任何一台有jvm的機器 執行(直譯)。
接著來看:
Core Java Tutorial 08 - Just in Time Compiler ( understanding JVM working in detail)
整理
1
直譯器(interpreter)是
直譯一行code變成0101 執行 ,在 直譯一行code變成0101 執行….
直到每行code結束。
2
維基 在 JIT 裡有一段:
代碼可以在即將執行時進行編譯(因此稱為「即時」),然後快取並在以後重用,無需重新編譯。
即時編譯(JIT) 比 直譯器(interpreter)好的地方 就在於:
假設有一段組合語言 ,像是 jump 100 ,之類的 ,重複在程式碼出現了1000次 。
直譯器(interpreter) 會把 jump 100。重複組譯1000次 同樣的機器語言 。
但是JIT會把這個 機器語言 存在記憶體(快取) ,下次看到這行組語的時候
,就可以 直接 從記憶體 拿這段機器語言執行 ,不用在組譯999次 。
3
維基這段:
JIT編譯是動態編譯的一種形式,允許自適應最佳化,比如動態重編譯和特定於微架構的加速
影片裡有講,如果原本的bytecode裡面有多餘的程式 造成 程式變慢。
如果JIT有{自適應最佳化}功能 ,會讓bytecode升等,讓程式變快。
4
像是
Java HotSpot Performance Engine
就用到了及時編譯 跟 自適應最佳化 的功能