這篇的看法可能有錯,參照大三上計算機組織報告JVM的心得,重寫這篇說明,但我這方面的知識卻是不進反退 。當時鍾伯伯聽完報告後,說內容有些錯誤,但沒說錯在那,我就繼續不求甚解下去啦。
談到跨平台時,不知道為何大家只提JVM,卻不談scripting language也跨平台,也許是scripting language跨平台是天經地義的事吧。深入一點來分析,JVM有別於scripting language的差異為:
- Java要用compiler轉成bytecode,再用Virtual Machine讀bytecode,而不是直接用Interpreter讀source code,少了parsing syntax的時間,效率較好。但這點在scripting language引入compiler後,不構成主要差異
- 除了VM外,沒有廣大的library,無法流行起來,但廣大的library要都能跨平台,要下許多苦工,Java的做法是建立強大的圍牆,全部自己來,讓OS相依的功能減到最小。這種土法練剛的精神,不是想做就辦得到的。
- bytecode是真正的instruction set,理論上可以依此做出CPU,用硬體直接執行;實際上也有這樣的CPU,只是一直沒成主流。要做到可支援硬體實作,不是隨便訂訂compiler的輸出就好,有別於單純地定義compiler的輸入輸出。
- instruction set最主要的差異在於JVM是stack architecture,它沒有register file,因此不被單一register size和register數量所限制,效率有所犠牲,彈性卻大幅提升
- Just-in-Time(JIT)的編譯技巧,提高JVM執行效率(正確來說,是減少效率的損失)
沒有留言:
張貼留言