昨天非常簡略的講了Java bytecode,今天來研究Java編譯和執行的流程。 (啊到底哪時候可以開始學Android API啦!!)
以C語言為例,它的編譯過程如下圖:
C因為compile time做了一堆事,所以runtime的時候執行檔直接就可以跑啦,很快速。但Java就不一樣了,請看下圖:
編譯細節不是重點所以省略,從圖明顯可看出,Java在runtime的時候做了很多事情,而且都是需要透過JVM這個小幫手才可成功執行。
所以來下個結論吧,這個網站的結論簡單明瞭,我翻譯成中文分享一下:
造成Java執行速度慢的主要兩個原因:
- Dynamic Linking: 因為Java每次執行程式都要重做一次linking (C/C++在compile time就做完linking了)
- Run-time Interpreter: runtime還需要直譯bytecode,所以Java可以說是編譯+直譯混合的語言
今天的學習就到這邊,下次見~