github:https://github.com/Himself65/OpenArkCompiler
背景:
1.將多語言之間聯合優化,比如c/c++、 java包括前端等,然後自己設計一個IR,不同的前端分析完後,然後轉爲統一的IR,這個是編譯原理上常做的事;
https://github.com/Himself65/OpenArkCompiler/blob/master/doc/MapleIRDesign.md
2.由於目前形成了一個以移動端手機爲中心的智能中心,但是不能滿足目前Android7.0以後以上的AOT+JIT的聯合編譯解釋的模式,說到底感覺無論是啓動什麼的還是慢。
方舟編譯器把所有的Android系統上的框架全部編譯爲native層。減少java與C++ 之間的JNI調用開銷。然後這個事交給開發者在編譯的時候處理。
3.打造成自己的一個生態環,你要想用這個方舟編譯器帶來好的用戶體驗就得用我華爲自己的runtime;要不然自己開發代價高。
4.同時對於jdk中內存回收機制,最常見的RC機制,需要進一步的優化;
一、方舟編譯器的編譯:
https://gitee.com/harmonyos/OpenArkCompiler/blob/master/doc/Development_Preparation.md
二、使用FZ編譯HelloWorld:
參考https://zhuanlan.zhihu.com/p/81340230,感謝從Android源碼中找到並提供java-core庫。建議編譯的時候編譯成debug版本的。這樣可以對照詳細日誌有利於後面的編譯理解。
調用jbc2mpl處理.jar文件爲xx.maple文件,即方舟編譯器的中間文件;
三、過程分析:
可以看到#UBSTIDX對應的是上面java字節碼反彙編以後的可讀文件形式:
3.接着我們繼續看一下HelloWorld.VatbleImpl.mpl文件
MCCIncRef:類似於dvmAddToReferenceTable,加入引用表
MCCDecRef:類似於dvmRemoveFromReferenceTable,從引用表中移除
以及MPL_CLEANUP_LOCALREFVARS,清除引用表。
同樣的去看HelloWorld.VtableImpl.s文件,可以清晰的看到對於RC機制管理的相關函數的調用。