Java的魔力:位元組碼(轉)

ba發表於2007-08-15
Java的魔力:位元組碼(轉)[@more@]Java 解決上述兩個問題——安全性和可移植性的關鍵在於Java 編譯器的輸出並不是可執行的程式碼,而是位元組碼(bytecode )。位元組碼是一套設計用來在Java 執行時系統下執行的高度最佳化的指令集,該Java 執行時系統稱為Java 虛擬機器(JavaVirtual Machine,JVM)。在其標準形式下,JVM是一個位元組碼直譯器。這可能有點讓人吃驚,因為像C++之類語言的編譯結果是可執行的程式碼。事實上,出於對效能的考慮,許多現代語言都被設計為編譯型,而不是解釋型。然而,正是透過JVM執行Java 程式才有助於解決在Internet 上下載程式的主要問題。這就是Java 輸出位元組碼的原因。
將一個Java 程式翻譯成位元組碼,有助於它更容易地在一個大範圍的環境下執行程式。原因非常直接:只要在各種平臺上都實現Java 虛擬機器就可以了。在一個給定的系統中,只要系統執行包存在,任何Java 程式就可以在該系統上執行。記住:儘管不同平臺的Java 虛擬機器的細節有所不同,但它們都解釋同樣的Java 位元組碼。如果一個Java 程式被編譯為本機程式碼,那麼對於連線到Internet 上的每一種CPU 型別,都要有該程式的對應版本。這當然不是一個可行的解決方案。因此,對位元組碼進行解釋是編寫真正可移植性程式的最容易的方法。
對Java 程式進行解釋也有助於它的安全性。因為每個Java 程式的執行都在Java 虛擬機器的控制之下,Java 虛擬機器可以包含這個程式並且能阻止它在系統之外產生副作用。正如你將看到的,Java 語言特有的某些限制增強了它的安全性。
被解釋的程式的執行速度通常確實會比同一個程式被編譯為可執行程式碼的執行速度慢一些。但是對Java 來說,這兩者之間的差別不太大。使用位元組碼能夠使Java 執行時系統的程式執行速度比你想象的快得多。
儘管Java 被設計為解釋執行的程式,但是在技術上Java 並不妨礙動態將位元組碼編譯為本機程式碼。SUN 公司在Java 2 發行版中提供了一個位元組碼編譯器——JIT(Just In Time,即時)。JIT 是Java 虛擬機器的一部分,它根據需要、一部分一部分地將位元組碼實時編譯為可執行程式碼。它不能將整個Java 序一次性全部編譯為可執行的程式碼,因為Java 要執行各種檢查,而這些檢查只有在執行時才執行。記住這一點是很重要的,因為JIT 只編譯它執行時需要的程式碼。儘管如此,這種即時編譯執行的方法仍然使效能得到較大提高。即使對位元組碼進行動態編譯後,Java 程式的可移植性和安全性仍能得到保證,因為執行時系統(該系統執行編譯)仍然能夠控制Java 程式的執行環境。不管Java 程式被按照傳統方式解釋為位元組碼,還是被動態編譯為可執行程式碼,其功能是相同的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-958069/,如需轉載,請註明出處,否則將追究法律責任。

相關文章