① AJDK-AOT靜態編譯
Go語言受到青睞於雲上新應用,主要因其運行時無依賴,靜態編譯的程序啟動速度快,無需JIT預熱。
java的靜態編譯技術作為激進的AOT技術,通過獨立編譯階段將Java程序轉化為本地代碼,運行時不需傳統Java虛擬機和運行時環境,僅需操作系統類庫支持。
靜態編譯技術使Java語言與原生native程序「合體」,將Java程序編譯為自舉的具有Java行為的原生native程序,兼備Java程序與原生native程序的優點。
Java編譯流程包括前端編譯、即時編譯(JIT編譯)與靜態提前編譯(AOT編譯)。
前端編譯將Java源碼(.java)轉化為Class文件(.class),實現程序轉化為滿足JVM規范的功能,優化側重於程序編碼,編譯為Class文件可直接給JVM解釋器執行,省去編譯時間,加快啟動速度。
後端編譯(JIT編譯)通過JVM內置的即時編譯器,在運行時將Class文件位元組碼編譯成本地機器碼,優化程序運行性能,提高執行效率。
靜態提前編譯(AOT編譯)程序運行前,直接將Java源碼編譯成本地機器碼,優點在於啟動速度快,缺點是靜態編譯後性能優化受限。
靜態編譯器如JAOTC、GCJ、Excelsior JET、ART等,尤其是ART雖然主要通過AOT編譯支持Java運行,但仍然存在解釋器。
目前Java體系主要採用前端編譯+JIT編譯方式,如JDK中的HotSpot虛擬機,通過前端編譯生成Class文件,啟動時解釋執行以節省時間,運行中通過JIT編譯優化熱點代碼提高執行效率。
JIT編譯與AOT編譯比較,JIT吞吐量高,有運行時性能加成,執行更快,但啟動速度較慢,需要時間與調用頻率觸發分層機制;AOT編譯內存佔用低,啟動速度快,無運行時性能加成,不能動態優化。
Java 9引入AOT編譯,能將class文件直接編譯成可執行二進制文件。
在JVM團隊與SOFAStack團隊合作下,AJDK實現靜態編譯的落地,將應用啟動時間從60秒優化至3.8秒,雙十一期間應用運行穩定,無故障,GC停頓時間在100毫秒,內存佔用和RT響應與傳統Java應用持平,啟動時間降低2000%。
綜上所述,靜態編譯在穩定性、資源佔用、RT響應等方面指標與傳統Java應用基本持平,啟動時間顯著縮短。
python是解釋語言,c++是編程語言。
1、編譯器是off-line,解釋器是on-line。編譯器把整個程序讀進來,進行一系列變大變小轉化優化的過程,產生可執行文件,然後編譯器退出,由可執行文件來讀取和輸出數據,python main.py這個命令會啟動python虛擬機和解釋器,將main.py的代碼一行一行解釋,只不過不同於REPL,它不會把每一行表達式的值列印出來。
2、Python是一種解釋執行的語言,Python的縮進要求十分嚴格,通過縮進來區別代碼塊,C++是一種需要編譯執行的語言,通過大括弧來區分代碼塊。C++的工作方式是,首先將寫好的代碼保存到擴展名為.cpp的文件中,然後編譯.cpp文件。編譯器將C++代碼轉換為原生代碼。然後執行這些機器代碼。因此,C++非常靠近硬體。
、C++和Python都是從C語言演變出來的面向對象的編程語言,將相關數據和操作數據的方法打包成一個類,不同的類相互隔離,也可以自由組合,類是一組數據以及操這組數據的函數(方法)的集合。類是對象的抽象模板,對象是類的具體實例,給類的數據取不同的值,同一個類就產成了不同的對象。