Fedora GCJ基礎(chǔ)講解安裝JAVA
Fedora GCJ能提高更方便的使用性能。下面就這就來講術(shù)Fedora GCJ。在Fedora的發(fā)布版中,Red Hat公司宣布將原有的Red Hat Linux開發(fā)計劃與Fedora Core Linux計劃整合成新的Fedora Project。Fedora Project將由Red Hat公司贊助,以社區(qū)支持的方式開發(fā)Linux發(fā)行版Fedora Core LinuxFedora4是首個包含了大量用Java編程語言編寫的代碼的版本。正是由于GNU類路徑(Classpath)和GNU Fedora GCJ(GNU Compiler for Java)的改進(jìn)才促成了這些附加部分。
Fedora GCJ基礎(chǔ)
首先,GNU Fedora GCJ不是Java。然而,F(xiàn)edora GCJ的目標(biāo)是實現(xiàn)一個完整的系統(tǒng),該系統(tǒng)兼容于Java并且將預(yù)編譯器(ahead-of-time compiler)置于中心。它擁有一個基于GNU類路徑的凈化類庫和一個內(nèi)置的解釋器。其編譯器可以將Java源文件、類文件、甚至是整個jar文件編譯成目標(biāo)碼。
以前Fedora GCJ對待Java采取的是一種“激進(jìn)且傳統(tǒng)”的方式,它認(rèn)為Java好像是C++的某個不常用的方言似的。這么做有好的一面,然而不幸的是兩者運(yùn)行時的鏈接模型差異太大——因此當(dāng)遇到一些規(guī)模比較大、復(fù)雜度比較高的Java應(yīng)用時,這種方法就無能為力了,特別是面對那些有著復(fù)雜的類加載機(jī)制的Java應(yīng)用時,顯得尤為突出。
在GCC4.0的發(fā)布版中,我們對Fedora GCJ實現(xiàn)了一種新的編譯方式,稱之為二進(jìn)制兼容性ABI(Binary Compatibility Application Binary Interface)。這種編譯方式將所有的鏈接推遲到運(yùn)行時刻進(jìn)行并且完全實現(xiàn)了Java的二進(jìn)制兼容規(guī)范——正好是讓預(yù)編譯的代碼與類裝載結(jié)合所需要的。
我們還增加了一個類映射數(shù)據(jù)庫。在運(yùn)行時,只要我們定義好一個類,F(xiàn)edora GCJ運(yùn)行時(叫做“l(fā)ibFedora GCJ”)就會在數(shù)據(jù)庫中尋找這個類。如果找到該類(注意我們這里使用的是類的“內(nèi)容”,而不僅僅是類名),那么libFedora GCJ就會映射到該共享庫中,該庫包含了編譯后的類。
這兩個改變使得我們可以做一些更強(qiáng)大的事情:我們可以預(yù)編譯Java程序而不必要求任何應(yīng)用級的改變。此外,由于采用了新的方式對字節(jié)碼進(jìn)行校驗,我們還能確保編譯的代碼在運(yùn)行時的類型安全。
構(gòu)建RPM
在Fedora Core上構(gòu)建Java應(yīng)用是很簡單的——現(xiàn)存的構(gòu)建方式不會發(fā)生變化。Fedora Core舶來了“Ant“并且使用來自Eclipse的Java編譯器將Java代碼編譯成字節(jié)碼。
描述如何編寫RPM已經(jīng)超出了本文討論的范圍,但是Fedora RPM指南上有一些有用的信息,JPackage上也有一些Java特定的指南。
一旦你的程序被編譯成字節(jié)碼,你就可以將他們編譯為本地代碼。因為Fedora GCJ尚不包含一個即時編譯器(JIT),這就是其獲得合理性能的方法。在某些情況下,其性能可能會超過已有即時編譯器,因為Fedora GCJ使用了共享庫……當(dāng)你同時運(yùn)行應(yīng)用程序的多個實例時,你就會看到這種巨大的差異。
【編輯推薦】