<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 310, comments - 6939, trackbacks - 0, articles - 3
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
    應(yīng)IT168寫的專稿.http://tech.it168.com/j/2007-08-23/200708232214378.shtml
     

    Java能為應(yīng)用程序提供統(tǒng)一的平臺(tái)嗎?

    自由紫風(fēng)

    Java作為一種成熟的語言,同時(shí)作為一種優(yōu)秀的平臺(tái),已經(jīng)廣為接受。很多的程序員對Java技術(shù)很精通。如果說在進(jìn)行軟件開發(fā)的時(shí)候,把Java這個(gè)平臺(tái)拋掉或?qū)χ萌糌杪?,對現(xiàn)在的開發(fā)者來說,這是一件忍痛割愛的事情。不管是為了更好的提高程序的性能或是穩(wěn)定性,還是看中了Java非常豐富的類庫,非Java應(yīng)用程序在JVM上運(yùn)行已經(jīng)吊足了程序員的胃口。那么,Java可以為應(yīng)用程序提供統(tǒng)一的運(yùn)行平臺(tái)嗎?JVM能承擔(dān)這一艱巨的任務(wù)否?

     

    一、       引言

     

    最近筆者讀到一篇Use Java to Improve Drupal's Scalability”的文章。作者(Geert Bevin)在使用Drupal一套采用GPL授權(quán)的開放源碼軟件,它可以讓個(gè)人或社區(qū)使用者很容易地發(fā)表、管理并組織一個(gè)網(wǎng)站里大量且多樣的內(nèi)容,已經(jīng)有許多個(gè)人和組織采用Drupal來建立各種不同的網(wǎng)站)時(shí)遇到了程序穩(wěn)定性方面的瓶頸。由于Drupal使用數(shù)據(jù)庫作為緩存,而PHP在跨越Request時(shí)是不會(huì)保存對象的狀態(tài)信息的,所以他決定使用Terracotta——一個(gè)JVM級的開源群集框架,能提供:HTTP Session復(fù)制,分布式緩存,POJO群集,跨越群集的JVM來實(shí)現(xiàn)分布式應(yīng)用程序協(xié)調(diào)。使用這一替代方案后,盡管他也遇到了一些別的小問題,但穩(wěn)定性的問題最終得以解決。同時(shí),將PHPJava下運(yùn)行,還可以得到更加安全的運(yùn)行環(huán)境。

    上面的例子,我們可以看出,應(yīng)用程序雖然采用了非Java的技術(shù)來構(gòu)建,但最終在Java的環(huán)境下運(yùn)行,并通過JVM來提高應(yīng)用程序的穩(wěn)定性和性能。而且,非Java編寫的程序可以在JVM上更加快速的運(yùn)行,這是非常有意思且有意義的事情。而在不久之前,也許三年或四年前,程序員經(jīng)常報(bào)怨,一種語言編寫的程序往往只能在特定的環(huán)境下運(yùn)行。當(dāng)然,這也包括Java本身。

    當(dāng)然,如今而言,這聽上去有點(diǎn)不夠人性化。因?yàn)椴还苁?/span>PHP應(yīng)用程序,Ruby on Rails應(yīng)用程序,或是.NET應(yīng)用程序,似乎都可以在Java環(huán)境下運(yùn)行了。更有甚者宣稱,這三種應(yīng)用程序在Java環(huán)境下的運(yùn)行效率比他們在各自特定的環(huán)境下運(yùn)行的效率還要高。

    不管是為了更好的提高程序的性能或是穩(wěn)定性,還是看中了Java非常豐富的類庫,非Java應(yīng)用程序在JVM上運(yùn)行已經(jīng)吊足了程序員的胃口。那么,Java可以為應(yīng)用程序提供統(tǒng)一的運(yùn)行平臺(tái)嗎?JVM能承擔(dān)這一艱巨的任務(wù)否?

     

    二、       JVM中運(yùn)行.NET依舊能保證性能

     

    Mainsoft公司最近發(fā)布了2.0版本的Mainsoft for Java EE(原名Visual Mainwin),同時(shí)發(fā)布的還有一份有趣的白皮書 。據(jù)該白皮書稱,一個(gè)基于.NET的應(yīng)用程序,若是借助于Mainsoft for Java EE技術(shù)交叉編譯之后運(yùn)行于Java EE平臺(tái)上,那么在某些方面的性能甚至?xí)?qiáng)于原有的.NET應(yīng)用程序。

    交叉編譯引擎將.NET Framework生成的Microsoft Intermediate LanguageMSIL)交叉編譯成Java的字節(jié)代碼。然后基于Java.NET Framework實(shí)現(xiàn)即可支持應(yīng)用程序運(yùn)行于Java平臺(tái)之上。不但如此,Visual Studio擴(kuò)展還能夠允許開發(fā)者在Java EE平臺(tái)上編寫、編譯、部署以及調(diào)試Web或服務(wù)器應(yīng)用程序。

    因?yàn)榇a的交叉編譯發(fā)生于字節(jié)碼級別,所以其過程并不需要源文件轉(zhuǎn)換——這就意味著開發(fā)者仍舊可以使用Visual Studio.Net作為他們可移植程序的開發(fā)環(huán)境。Mainsoft還使用Java重新實(shí)現(xiàn)了很大的一部分.NET Framework,包括ASP.NetADO.Net以及Web Service API等。不過因?yàn)?/span>Mainsoft for Java EE主要專注于Web以及服務(wù)器應(yīng)用程序方面,所以類似Windows Form的組件則沒有提供。

    1. ASP.NET.NET Server部署在Java EE上示意圖

    遷移后的Java EE應(yīng)用程序可以運(yùn)行于IBM WebSphereBEA WebLogicApache Tomcat之上。在完全相同的硬件條件下,遷移后的Java EE應(yīng)用程序(運(yùn)行于WebSphere之上):每秒處理請求數(shù)(Requests Per SecondRPS)比原有.NET應(yīng)用程序提高了8%;具有更好的CPU可伸縮性 ,在RPS方面幾乎是線性增長的;在各種經(jīng)過測試的負(fù)載情況下,都提高了至少4%的響應(yīng)時(shí)間;在重負(fù)載情況下,RPS提高了至少5%

    從客戶的角度來看這的確是一種很好且很吸引人的技術(shù),比如客戶已經(jīng)傾向于J2EE的解決方案,而對原有的某些采用.NET實(shí)現(xiàn)的系統(tǒng),假期再采用J2EE來重寫,其中的人力物力的浪費(fèi)可想而知。此外.NETJ2EE平臺(tái)現(xiàn)在來很難說誰優(yōu)誰劣,各有所長,如果能夠發(fā)揮各自的優(yōu)勢豈不是非常妙的事情。

    通常要實(shí)現(xiàn).NETJ2EE之間的互操作只能通過高層接口,如WebService等,效率比較低,此外必須部署和維護(hù)不同的操作系統(tǒng)等問題,現(xiàn)在可以把.NET的程序編譯成JVM Bytecode,如此一來,兩類程序可以融合在一塊。不過互操作還是得通過高層接口才能實(shí)現(xiàn),不知道Mainsoft在他們之間的互操作上有什么好方法。這方面有JIntegra的產(chǎn)品,ArcGIS用的就是這個(gè)產(chǎn)品。

     

    三、       Ruby on JVM

     

    Ruby on JVM就是說把Ruby放到JVM上運(yùn)行,換句話說,在JVM這個(gè)平臺(tái)上可以去運(yùn)行Ruby,為什么會(huì)把Ruby放到JVM上運(yùn)行呢?因?yàn)楹芏嗳俗钇婀值倪@一個(gè)問題就是,Ruby有它自己的平臺(tái),它為什么就會(huì)放到JVM上運(yùn)行?實(shí)際上,廣大的程序員們已經(jīng)知道,Java本身是已經(jīng)被大家廣為接受的一個(gè)平臺(tái),已經(jīng)有很多的程序員非常熟悉Java技術(shù)知識(shí),所以說Java這個(gè)平臺(tái)本身已經(jīng)得到了大家的一個(gè)認(rèn)可,那么,如果在開發(fā)的時(shí)候把Java這個(gè)平臺(tái)去拋掉不利用,對Java開發(fā)者來說,這是一件不可能的事情。

    Ruby可能現(xiàn)在受程序員所關(guān)注,可能主要是由于Ruby on rails的興起,而Ruby on rails帶給大家的是什么呢?最主要的體現(xiàn)是開發(fā)效率的提升。有媒體宣稱Ruby on Rails可以給軟件開發(fā)帶來十倍開發(fā)效率的提升,當(dāng)然這不排除炒作的成分。即便拋去這個(gè)廣告因素來說,可能也確確實(shí)實(shí)有幾倍的效率提升。而人們總是愿意用這種最少的力量去干盡可能多的事情,那既然有像Ruby這么好的開發(fā)語言,人們則希望能把Ruby運(yùn)用在自己的實(shí)際的工作之中。如果把Ruby這樣好的語言編寫的程序,和Java這樣一個(gè)比較成熟的平臺(tái),兩者結(jié)合起來的話,則能把二者的優(yōu)勢結(jié)合起來,對程序員來說也是一個(gè)非常好的選擇。

    Ruby的優(yōu)點(diǎn)就是它開發(fā)效率高,而Java的優(yōu)點(diǎn)就是它資源非常豐富。而在企業(yè)級應(yīng)用,已經(jīng)有大量且成熟的Java EE解決方案,這樣兩者可以互補(bǔ)。如果把Ruby放到JVM這個(gè)平臺(tái)上,在Ruby的代碼里就可以使用Java的類庫。而Java已經(jīng)有很多現(xiàn)成的且做得很好的類庫及解釋方案,都可以在Ruby代碼中得到復(fù)用;另外一方面,可以把Ruby的應(yīng)用部署到JVM上。

    要使Ruby運(yùn)行在JVM上,主要的方式有兩種。第一,因?yàn)?/span>Ruby是一種解釋性的語言,利用Java開發(fā)一個(gè)Ruby的解釋器,然后讓Ruby的應(yīng)用程序運(yùn)行在JVM平臺(tái)上,而這也確確實(shí)實(shí)是現(xiàn)在可能比較主流的方式——JRuby;那另外一種方式,除了解釋的方式外,還可以采用編譯的方式,把Ruby的代碼編譯成Java Bytecode,然后讓Bytecode去運(yùn)行在JVM的平臺(tái)上——XRuby

     

    四、       JVM——高層次的OS

     

    在這樣的一場游戲中,我們似乎可以把Java看作為構(gòu)建于OS(操作系統(tǒng))之上高層次的OS——可以為應(yīng)用程序或框架提供重要的底層服務(wù)及功能。但這些服務(wù)及功能非一般的普通OS技術(shù)能提供,例如普通的OS可能有:內(nèi)存管理;線程,處理及同步;執(zhí)行本地程序或解釋Shell腳本。而JVM這層OS,可提供:簡易的垃圾回收;在應(yīng)用程序中對內(nèi)存進(jìn)行安全管理;即時(shí)編譯技術(shù)(JIT,Just In Time)執(zhí)行動(dòng)態(tài)代碼。

    Windows程序設(shè)計(jì)領(lǐng)域處于發(fā)展初期時(shí),Windows程序員可使用的編程工具唯有API函數(shù)。這些函數(shù)在程序員手中猶如積木塊一樣,可搭建出各種界面豐富、功能靈活的應(yīng)用程序。不過,由于這些函數(shù)結(jié)構(gòu)復(fù)雜,所以往往難以理解,而且容易誤用。而隨著軟件技術(shù)的不斷發(fā)展,在Windows平臺(tái)上出現(xiàn)了很多優(yōu)秀的可視化編程環(huán)境,程序員可以采用所見即所得的編程方式來開發(fā)具有精美用戶界面和功能的應(yīng)用程序。這些可視化編程環(huán)境操作簡便、界面友好,比如:Visual C++,DelphiVisual Basic等等。在這些工具中提供了大量的類庫和各種控件,它們替代了API的神秘功能。事實(shí)上,這些類庫和控件都是構(gòu)筑在Windows API的基礎(chǔ)上的,但它們使用方便,加速了Windows應(yīng)用程序的開發(fā),所以受到程序員的普遍采用。有了這些類庫和控件,程序員們便可以把主要精力放在 整體功能的設(shè)計(jì)上,而不必過于關(guān)注具體細(xì)節(jié)。不過,這也導(dǎo)致了非常多的程序員在類庫面前固步自封,對下層API函數(shù)的強(qiáng)大功能一無所知。

    當(dāng)OS技術(shù)開始流行后,隨著C/S開發(fā)模式的發(fā)展,每種語言/編譯器/IDE等都具有各自專用的API和運(yùn)行時(shí)。因此,在程序員的世界里充滿了各種各樣的內(nèi)庫及可供程序員調(diào)用的組件,有如Glibs/MSVCOWL/MFC、VBRUN、Smalltalk VMs等等。

    Java.NET都競爭著開發(fā)高層次的OS.NET由于嵌入進(jìn)了Windows操作系統(tǒng),因此顯得更加的專業(yè)。但是,Java顯然更加的關(guān)注如何使JVM為更多的開發(fā)語言提供更寬闊的平臺(tái)。因此,Sun宣稱,Java EE 7將會(huì)為更多的開發(fā)語言提供更好的統(tǒng)一平臺(tái)。當(dāng)然開源的Java JDK將使這一宣稱更具可操作性,使Java不但可以嵌入到Windows中去,同時(shí)還有Solaris……

     

    五、       小論

     

    網(wǎng)上已經(jīng)有將CRL Bytecode轉(zhuǎn)成Java bytecode的編譯器。據(jù)稱,這使用得在.NET環(huán)境下開發(fā)的應(yīng)用程序,其運(yùn)行速度比在.NET環(huán)境下要塊得多。同時(shí),最近,相關(guān)組織已經(jīng)采用Java開發(fā)了兩個(gè)操作系統(tǒng):JXJNode,當(dāng)然這只是很前沿的探索,并非像Windows一樣的成熟。IBM也宣稱要在這方面進(jìn)行更大的投入研究。同時(shí),BEA采用Java開發(fā)的LiquidVM不再需要操作系統(tǒng),它可以在自己的VMWare上運(yùn)行。

    我們有理由相信,走過了十多年風(fēng)風(fēng)雨雨的Java,是有足夠的能力和潛力為應(yīng)用程序提供一個(gè)統(tǒng)一的運(yùn)行平臺(tái)的。不管是PHP應(yīng)用程序,Ruby on Rails應(yīng)用程序,或是.NET應(yīng)用程序,應(yīng)該都可以在Java環(huán)境下運(yùn)行,且應(yīng)用程序在Java環(huán)境下的運(yùn)行效率比在他們各自特定的環(huán)境下運(yùn)行的效率還要高。這就是Java的魅力,同時(shí)也是它的潛力。


    評論

    # re: Java能為應(yīng)用程序提供統(tǒng)一的平臺(tái)嗎?  回復(fù)  更多評論   

    2007-08-24 09:44 by dennis
    Jruby現(xiàn)在走的也是編譯的方式

    # re: Java能為應(yīng)用程序提供統(tǒng)一的平臺(tái)嗎?  回復(fù)  更多評論   

    2007-08-26 17:38 by 海邊沫沫
    呵呵,不要想著什么東西能夠統(tǒng)一。
    程序員的性格就是喜歡嘗試不同的新東西
    主站蜘蛛池模板: 免费人成网站在线观看10分钟| 在线不卡免费视频| 国产免费一区二区三区| 亚洲国产日产无码精品| 国产午夜精品理论片免费观看| 亚洲第一极品精品无码久久| 一级毛片免费全部播放| 久久亚洲国产精品| 国色精品va在线观看免费视频| 亚洲精品国产高清嫩草影院| 日韩精品在线免费观看| 久久综合九九亚洲一区| 成人免费看吃奶视频网站| 亚洲人av高清无码| 日韩激情无码免费毛片| 182tv免费视频在线观看| 亚洲中文字幕乱码一区| 中文字幕亚洲图片| 日本免费高清视频| 亚洲av无码专区在线电影| 亚洲一区综合在线播放| 国产一卡二卡四卡免费| 韩国免费a级作爱片无码| 亚洲乱码日产精品一二三| 亚洲AV日韩AV鸥美在线观看| 免费国产真实迷j在线观看| 老妇激情毛片免费| 亚洲日本中文字幕一区二区三区 | 亚洲性无码AV中文字幕| 久久精品国产精品亚洲色婷婷| 国产a级特黄的片子视频免费| 无码日韩人妻AV一区免费l| 中文字幕第一页亚洲| 69成人免费视频无码专区| 国产成人精品无码免费看| 日本视频免费观看| 亚洲成AV人片高潮喷水| 亚洲另类图片另类电影| 亚洲精品天天影视综合网| 成年私人影院免费视频网站| 91福利视频免费|