選擇合適的java腳本語言文章出處:網(wǎng)上收集 作者:未知 發(fā)布時間:2000-11-29
關(guān)鍵詞:選擇合適的java腳本語言 ·JSP教程:tomcat配置數(shù)據(jù)庫連接池選擇合適的java腳本語言 --如果你正考慮在java應(yīng)用中集成腳本解釋器,,最難得是決定使用那種 摘要:腳本語言已經(jīng)向 java開發(fā)者證明了它的價值,。它讓客戶實(shí)現(xiàn)應(yīng)用功能的擴(kuò)展和界面的個性化,,從而程序的價值得以提升。另外,,它們可以顯著的簡化程序開發(fā)者的設(shè)計任務(wù),通 過實(shí)現(xiàn)動態(tài)定義、裝載和評估,。對于開發(fā)人員,,集成一種或多種腳本語言的任務(wù)是簡單的,從越來越長的可選列表中選出一個確實(shí)困難的,。本文描述了一些伴隨 java應(yīng)用中腳本語言支持的問題,,并從不同角度比較了Groovy, JudoScript, Pnuts, JRuby, Jacl, Jython, Rhino和Beanshell,以期能幫助讀者作出正確的決定,。 三年前,,我在javaworld寫了一遍叫做 “JavaScripting語言,那種是適合你的,?”的文章,。當(dāng)我收集解釋器并進(jìn)行比較時,我盡量選擇那些看起來滿足苛刻商務(wù)需求的,。理想狀態(tài)下,,我希 望解釋器能夠方便的擴(kuò)展應(yīng)用的用戶接口,并且有易讀的腳本代碼,,高可靠,,快速,有好的支持和文檔,,并且是完備的,。在那個時候,我把列表限制到了 Jacl,,Jython,,Rhion和BeanShell。 過去的三年中發(fā)生了很多變化,??蛇x項(xiàng)不再是很少的幾個,不管是動態(tài)開發(fā)還是直 接選擇,,可選的腳本語言都有一打以上,。可靠的選擇列表比三年前增多了,,現(xiàn)在還包括了Groovy, JudoScript, Pnuts和BeanShell,。我們還可以考慮不再這個列表中的其他解釋器,但這個列表中,,已經(jīng)足夠開發(fā)人員自己的所需了,。 我準(zhǔn)備標(biāo)準(zhǔn) 化所有解釋器,看看Jacl, Jython, Rhion和BeanShell在2002年后性能有沒有提高,,并看看Groovy, JudoScript, Jruby和Pnuts同它們比較起來會怎樣,。我認(rèn)為,,看看不同腳本語言有什么獨(dú)特之處,有什么特別的強(qiáng)項(xiàng)和弱點(diǎn)是很有意思的事情,。 商務(wù)風(fēng)險 在 以前的文章里,,我講述了一些著名的優(yōu)秀腳本解釋器的資料,并說明了結(jié)合腳本解釋器時你可能遇到的風(fēng)險,。本文中,,我把這些內(nèi)容簡化為一些要點(diǎn),并根據(jù)我在寫 那些文章之后的經(jīng)驗(yàn)進(jìn)行了改進(jìn),。Java腳本解釋器的優(yōu)點(diǎn)是毋庸置疑的,。使用腳本語言編碼比使用java簡單;腳步語言使程序的應(yīng)用邏輯和用戶界面的推動 (drive/驅(qū)動,?)和擴(kuò)展成為可能,;腳本代碼可以違反java應(yīng)用中類接口而運(yùn)行,這是非常強(qiáng)大的功能,。這樣可以容易的編寫程序測試驅(qū)動(write test drivers against your program),,與編碼并編譯用于java類的單元測試相比,這是更加快速的,。另外,,如果用戶花時間使用腳本擴(kuò)展你的應(yīng)用,他們就作你的工具上進(jìn)行了投 資,,這使得你在競爭中多了一件利器,。 但是,當(dāng)在應(yīng)用中集成jiava腳本解釋器時,,你必須面對一定的風(fēng)險,。兩個主要的風(fēng)險是,解釋器可能 成為孤兒,,或者是當(dāng)你把產(chǎn)品裝上后,,你可能發(fā)現(xiàn)解釋器的致命缺陷。大多數(shù)解釋器是通過開源模型動態(tài)維護(hù)和更新的,,在這種情況下,,你可以向研究你所發(fā)現(xiàn)問題 的專家尋求幫助,給解釋器打補(bǔ)丁,,或者在未來版本中包含你需要的bug-fix(bug修理,?)。這是一種安全的賭博,,但并不能得到足夠保證,。如果你正嚴(yán) 肅的考慮采用某個特定的解釋器,請先看看它的開發(fā)站點(diǎn),,看看它的代碼的進(jìn)化,,看看上面的流言板,,用戶的提問都有答案否。這可以幫助你了解代碼支持的實(shí)際情 況,。 自我保護(hù)的另一格措施是,,對你準(zhǔn)備采用的任腳本何解釋器進(jìn)行完全測試。一些解釋器在發(fā)布時包含了一個單元測試集,。在測試你的應(yīng)用中集 成的解釋器時,這些單元測試可以作為你的更大的測試集中的一部分,。在測試解釋器和應(yīng)用之間的集成時,,可以剔出自己的工作(you have your work cut out for you),因?yàn)槟_本解釋器有足夠的彈性,,并向開發(fā)人員暴露了足夠的功能,。你在早期向質(zhì)量保證投入時間,而不是在應(yīng)用已經(jīng)成為產(chǎn)品,,當(dāng)用戶需要急切的bug 修復(fù)時才考慮,。 新的競爭者列表 如果你正在尋找一個腳本解釋器,你有很多選擇,。一些解釋器支持已經(jīng)存在的語言,,比如 Ruby, Python, JavaScript, Java和Tcl。另外一些解釋器,,如JudoScript, Groovy和Pnuts,,選擇了它們自己的類似java的語言語法。在比較不同的解釋器,,需要進(jìn)行的最大的選擇是,,那種腳本語言的語法能很好的適合你的 應(yīng)用。像這種個人偏好發(fā)生作用的技術(shù)選擇,,可能在不同的開發(fā)人員團(tuán)隊(duì)引起激烈的爭論,。也許本文能有助于解決一些爭論。 我收集比較了最近發(fā)布的八種不同的腳本解釋器,。解釋器及其版本都在下表中列出,。如果你對這些解釋器并不熟悉,我還給出了每種解釋器功能和開發(fā)活動的概要(a thumbnail sketch),。 腳本語言 版本號 簡短描述 Jacl 1.3.1 Tcl解釋器的java實(shí)現(xiàn),。如果你希望在腳本中使用工具包來創(chuàng)建用戶接口類,看看Swank工程中的包裹(wrap)java swing 工具的類集,。Jacl已經(jīng)存在較長時間了,,并且還在持續(xù)改進(jìn)。 Jython 2.1 Python解釋器的java實(shí)現(xiàn),。我注意到的一個問題是,,已經(jīng)有很長一段時間沒有看到這個解釋器的新版本了,。但在Jython的網(wǎng)站上,說明了改變這種現(xiàn)狀的計劃,,并且有基金支持,。 Rhino 1.6.1 JavaScript解釋器的java實(shí)現(xiàn)。它還支持把腳本編譯成類文件,。它的最新版本在幾個月前發(fā)布,,并加入了xml支持。 JRuby 0.8 Ruby解釋器的java實(shí)現(xiàn),。它正在發(fā)展中,,其測試版0.8表現(xiàn)良好。 BeanShell 2.0 beta 2 它是一個java源文件解釋器,,正在持續(xù)的發(fā)展和加入新特性,。2.0版本提供了完全的普通java源文件解釋支持。 Groovy 1.0 beta 9 Groovy是把Python和Ruby的特征加入java類似語法形成的,,由很多令人興奮的特征,。可以把腳本直接編譯成類文件,,對不同的IDE,,又很多Groovy插件可供選擇,JSR委員會正在制定Groovy的規(guī)范,。 JudoScript 0.9 它有和JavaScript類似的編程語法,,學(xué)習(xí)和使用更加容易。在它的FAQ中提到了它的一個明確目標(biāo):“支持對象級,,操作系統(tǒng)級和應(yīng)用級的腳本”,。我測試的0.9版運(yùn)行良好。 Pnuts 1.1 beta 2 Pnuts有和java相似的編程語法,,并保持持續(xù)更新,。它可以把腳本直接編譯成java類文件。 第一個指標(biāo):性能 未 來測試第一項(xiàng)指標(biāo),,我為每個解釋器編寫了等價的腳本代碼,,讓他們完成簡單的任務(wù)集并記錄它們執(zhí)行腳本所花的時間。我的測試腳本主要關(guān)注基本操作,,如循環(huán),, 整數(shù)比較和大的一維、二維數(shù)組分配和初始化,。用于各個解釋器的測試腳本和運(yùn)行它們的java程序可以在原文資源部分下載,。 在基準(zhǔn)測試中最 有用的信息是,解釋器完成簡單任務(wù)速度的apples-to-apples比較。如果你重點(diǎn)考慮吞吐量,,基準(zhǔn)數(shù)將十分重要,。對每種腳本語言,我盡力編寫相 識的測試代碼,。測試使用Java1.4.2在東芝Tecra8100筆記本上運(yùn)行,,CPU為PIII700MHz,內(nèi)存256MB,。啟動JVM時使用了默 認(rèn)的堆尺寸,。出于向你展示解釋器到底有多快還是多慢的興趣,我編寫了測試用例的java代碼,,并在java1.4.2上運(yùn)行了,。測試集包括: 1到1,000,,000的計數(shù) 1,000,,000次整數(shù)相等比較 分配并初始化包含100,,000個元素的數(shù)組 分配并初始化一個500*500的二維數(shù)組 在2002年后有提高么? 在 告訴你哪個解釋器最快之前,,我們先看看圖1,,這個條狀圖列出了很多耗時任務(wù)的結(jié)果:1百萬次整數(shù)相等比較。對2002年文章中講述的4種腳本解釋器,,我給 出了在Java1.3.1JVM和Java1.4.2上運(yùn)行所需的時間,。非常有趣的是,測試Jython時用的是同一個版本的腳本解釋器,,結(jié)果表明新版 JVM上速度提升了25%,。在加上我使用了和前一次測試完全相同的硬件,所以可以肯定JVM1.4.2減少了運(yùn)行基礎(chǔ)測試所需的時間?,F(xiàn)在看看 Rhino,,BeanShell和Jacl發(fā)生了什么:新版Rhino在1.4.2的JVM上比在1.3.1的JVM上運(yùn)行的舊版本快樂86%,Jacl 的這個數(shù)字是76%,??梢钥闯觯阅芴岣吡撕芏?。 四項(xiàng)任務(wù)的總時間 由于解釋器在速度方面都十分相似(至少對我的基準(zhǔn)測試是這樣),,我把各解釋器完成四項(xiàng)基準(zhǔn)測試所耗的總時間算出來并在圖2中給出。 多變的標(biāo)志 對 這些簡單測試,,Rhino,,Pnuts和Jytho始終是最快的,緊跟在后面的時Groovy,,然后是JudoScript,,然后是其他的,。這些性能參數(shù) 對你是否有用,取決于你希望腳本語言做的事情,。如果你的腳本函數(shù)包含大量的迭代,,并且用戶要等待結(jié)果,你就需要關(guān)注速度最快的解釋器,,或者你就該考慮用 java實(shí)現(xiàn)高性能要求的算法,,而不是腳本代碼。如果你的腳本只需要很少的重復(fù)操作,,這些解釋器速度的差異就不是那么重要了,,快速的硬件也會使問題變得不 同。 還有一點(diǎn)需要指出的是,,即使最快的解釋器,,完成上面測試所用的時間也是同樣功能java代碼所用時間的大約40倍。如果速度是你最主要的問題,,你必須清楚,,最有意義的事情是用java代替腳本代碼實(shí)現(xiàn)關(guān)鍵算法。 一 些腳本解釋器支持腳本代碼直接編譯成字節(jié)碼,。我對這將會產(chǎn)生多大的性能差異非常好奇,,所以我進(jìn)行了另一項(xiàng)測試。我用Rhino腳本解釋器把基準(zhǔn)測試腳本編 譯成了字節(jié)碼,,然后我把整個基準(zhǔn)測試集用腳本和腳本產(chǎn)生的字節(jié)碼分別運(yùn)行了10遍,。令人驚奇的是,與直接運(yùn)行腳本相比,,腳本碼編譯成字節(jié)碼再運(yùn)行僅僅節(jié)省 了10%的時間,。我最初任務(wù),JVM的魔咒占用了運(yùn)行測試集的大部分時間,,但進(jìn)一步的檢查發(fā)現(xiàn)JVM魔咒本身只占測試集運(yùn)行總時間的20%,。簡單腳本代碼 編譯成字節(jié)碼看起來會有積極的意義,但這并不一定是顯著提高性能的銀彈,。也許在更長的或者,,更加計算中心的腳本中,會看到不同的結(jié)果,。 第二個標(biāo)準(zhǔn):集成難度 第三個標(biāo)準(zhǔn):許可證 英文原文: http://www./javaworld/jw-03-2005/jw-0314-scripting.html ·Windows 2000 server下搭建JSP網(wǎng)站環(huán)境 ·JSP網(wǎng)站開發(fā)環(huán)境的目錄結(jié)構(gòu)標(biāo)準(zhǔn) ·Jsp頁面實(shí)現(xiàn)文件上傳下載 ·Jsp常用功能:CSV文件的生成與分析 關(guān)鍵詞:選擇合適的java腳本語言 選擇合適的java腳本語言 --如果你正考慮在java應(yīng)用中集成腳本解釋器,,最難得是決定使用那種 摘要:腳本語言已經(jīng)向java開發(fā)者證明了它的價值。它讓客戶實(shí)現(xiàn)應(yīng)用功能的擴(kuò)展和界面的個性化,,從而程序的價值得以提升,。另外,它們可以顯著的簡化程序開發(fā)者的設(shè)計任務(wù),通過實(shí)現(xiàn)動態(tài)定義,、裝載和評估,。對于開發(fā)人員,集成一種或多種腳本語言的任務(wù)是簡單的,,從越來越長的可選列表中選出一個確實(shí)困難的,。本文描述了一些伴隨java應(yīng)用中腳本語言支持的問題,并從不同角度比較了Groovy, JudoScript, Pnuts, JRuby, Jacl, Jython, Rhino和Beanshell,,以期能幫助讀者作出正確的決定,。 三年前,我在javaworld寫了一遍叫做“JavaScripting語言,,那種是適合你的,?”的文章。當(dāng)我收集解釋器并進(jìn)行比較時,,我盡量選擇那些看起來滿足苛刻商務(wù)需求的,。理想狀態(tài)下,我希望解釋器能夠方便的擴(kuò)展應(yīng)用的用戶接口,,并且有易讀的腳本代碼,,高可靠,快速,,有好的支持和文檔,并且是完備的,。在那個時候,,我把列表限制到了Jacl,Jython,,Rhion和BeanShell,。 過去的三年中發(fā)生了很多變化??蛇x項(xiàng)不再是很少的幾個,,不管是動態(tài)開發(fā)還是直接選擇,可選的腳本語言都有一打以上,??煽康倪x擇列表比三年前增多了,現(xiàn)在還包括了Groovy, JudoScript, Pnuts和BeanShell,。我們還可以考慮不再這個列表中的其他解釋器,,但這個列表中,已經(jīng)足夠開發(fā)人員自己的所需了,。 我準(zhǔn)備標(biāo)準(zhǔn)化所有解釋器,,看看Jacl, Jython, Rhion和BeanShell在2002年后性能有沒有提高,并看看Groovy, JudoScript, Jruby和Pnuts同它們比較起來會怎樣。我認(rèn)為,,看看不同腳本語言有什么獨(dú)特之處,,有什么特別的強(qiáng)項(xiàng)和弱點(diǎn)是很有意思的事情。 商務(wù)風(fēng)險 在以前的文章里,,我講述了一些著名的優(yōu)秀腳本解釋器的資料,,并說明了結(jié)合腳本解釋器時你可能遇到的風(fēng)險。本文中,,我把這些內(nèi)容簡化為一些要點(diǎn),,并根據(jù)我在寫那些文章之后的經(jīng)驗(yàn)進(jìn)行了改進(jìn)。Java腳本解釋器的優(yōu)點(diǎn)是毋庸置疑的,。使用腳本語言編碼比使用java簡單,;腳步語言使程序的應(yīng)用邏輯和用戶界面的推動(drive/驅(qū)動?)和擴(kuò)展成為可能,;腳本代碼可以違反java應(yīng)用中類接口而運(yùn)行,,這是非常強(qiáng)大的功能。這樣可以容易的編寫程序測試驅(qū)動(write test drivers against your program),,與編碼并編譯用于java類的單元測試相比,,這是更加快速的。另外,,如果用戶花時間使用腳本擴(kuò)展你的應(yīng)用,,他們就作你的工具上進(jìn)行了投資,這使得你在競爭中多了一件利器,。 但是,,當(dāng)在應(yīng)用中集成jiava腳本解釋器時,你必須面對一定的風(fēng)險,。兩個主要的風(fēng)險是,,解釋器可能成為孤兒,或者是當(dāng)你把產(chǎn)品裝上后,,你可能發(fā)現(xiàn)解釋器的致命缺陷,。大多數(shù)解釋器是通過開源模型動態(tài)維護(hù)和更新的,在這種情況下,,你可以向研究你所發(fā)現(xiàn)問題的專家尋求幫助,,給解釋器打補(bǔ)丁,或者在未來版本中包含你需要的bug-fix(bug修理,?),。這是一種安全的賭博,但并不能得到足夠保證,。如果你正嚴(yán)肅的考慮采用某個特定的解釋器,,請先看看它的開發(fā)站點(diǎn),,看看它的代碼的進(jìn)化,看看上面的流言板,,用戶的提問都有答案否,。這可以幫助你了解代碼支持的實(shí)際情況。 自我保護(hù)的另一格措施是,,對你準(zhǔn)備采用的任腳本何解釋器進(jìn)行完全測試,。一些解釋器在發(fā)布時包含了一個單元測試集。在測試你的應(yīng)用中集成的解釋器時,,這些單元測試可以作為你的更大的測試集中的一部分,。在測試解釋器和應(yīng)用之間的集成時,可以剔出自己的工作(you have your work cut out for you),,因?yàn)槟_本解釋器有足夠的彈性,,并向開發(fā)人員暴露了足夠的功能。你在早期向質(zhì)量保證投入時間,,而不是在應(yīng)用已經(jīng)成為產(chǎn)品,,當(dāng)用戶需要急切的bug修復(fù)時才考慮。 新的競爭者列表 如果你正在尋找一個腳本解釋器,,你有很多選擇,。一些解釋器支持已經(jīng)存在的語言,比如Ruby, Python, JavaScript, Java和Tcl,。另外一些解釋器,,如JudoScript, Groovy和Pnuts,選擇了它們自己的類似java的語言語法,。在比較不同的解釋器,,需要進(jìn)行的最大的選擇是,那種腳本語言的語法能很好的適合你的應(yīng)用,。像這種個人偏好發(fā)生作用的技術(shù)選擇,可能在不同的開發(fā)人員團(tuán)隊(duì)引起激烈的爭論,。也許本文能有助于解決一些爭論,。 我收集比較了最近發(fā)布的八種不同的腳本解釋器。解釋器及其版本都在下表中列出,。如果你對這些解釋器并不熟悉,,我還給出了每種解釋器功能和開發(fā)活動的概要(a thumbnail sketch)。 腳本語言 版本號 簡短描述 Jacl 1.3.1 Tcl解釋器的java實(shí)現(xiàn),。如果你希望在腳本中使用工具包來創(chuàng)建用戶接口類,,看看Swank工程中的包裹(wrap)java swing 工具的類集。Jacl已經(jīng)存在較長時間了,,并且還在持續(xù)改進(jìn),。 Jython 2.1 Python解釋器的java實(shí)現(xiàn),。我注意到的一個問題是,已經(jīng)有很長一段時間沒有看到這個解釋器的新版本了,。但在Jython的網(wǎng)站上,,說明了改變這種現(xiàn)狀的計劃,并且有基金支持,。 Rhino 1.6.1 JavaScript解釋器的java實(shí)現(xiàn),。它還支持把腳本編譯成類文件。它的最新版本在幾個月前發(fā)布,,并加入了xml支持,。 JRuby 0.8 Ruby解釋器的java實(shí)現(xiàn)。它正在發(fā)展中,,其測試版0.8表現(xiàn)良好,。 BeanShell 2.0 beta 2 它是一個java源文件解釋器,正在持續(xù)的發(fā)展和加入新特性,。2.0版本提供了完全的普通java源文件解釋支持,。 Groovy 1.0 beta 9 Groovy是把Python和Ruby的特征加入java類似語法形成的,由很多令人興奮的特征,??梢园涯_本直接編譯成類文件,對不同的IDE,,又很多Groovy插件可供選擇,,JSR委員會正在制定Groovy的規(guī)范。 JudoScript 0.9 它有和JavaScript類似的編程語法,,學(xué)習(xí)和使用更加容易,。在它的FAQ中提到了它的一個明確目標(biāo):“支持對象級,操作系統(tǒng)級和應(yīng)用級的腳本”,。我測試的0.9版運(yùn)行良好,。 Pnuts 1.1 beta 2 Pnuts有和java相似的編程語法,并保持持續(xù)更新,。它可以把腳本直接編譯成java類文件,。 第一個指標(biāo):性能 未來測試第一項(xiàng)指標(biāo),我為每個解釋器編寫了等價的腳本代碼,,讓他們完成簡單的任務(wù)集并記錄它們執(zhí)行腳本所花的時間,。我的測試腳本主要關(guān)注基本操作,如循環(huán),,整數(shù)比較和大的一維,、二維數(shù)組分配和初始化。用于各個解釋器的測試腳本和運(yùn)行它們的java程序可以在原文資源部分下載,。 在基準(zhǔn)測試中最有用的信息是,,解釋器完成簡單任務(wù)速度的apples-to-apples比較,。如果你重點(diǎn)考慮吞吐量,基準(zhǔn)數(shù)將十分重要,。對每種腳本語言,,我盡力編寫相識的測試代碼。測試使用Java1.4.2在東芝Tecra8100筆記本上運(yùn)行,,CPU為PIII700MHz,,內(nèi)存256MB。啟動JVM時使用了默認(rèn)的堆尺寸,。出于向你展示解釋器到底有多快還是多慢的興趣,,我編寫了測試用例的java代碼,并在java1.4.2上運(yùn)行了,。測試集包括: 1到1,,000,000的計數(shù) 1,,000,,000次整數(shù)相等比較 分配并初始化包含100,000個元素的數(shù)組 分配并初始化一個500*500的二維數(shù)組 在2002年后有提高么,? 在告訴你哪個解釋器最快之前,,我們先看看圖1,這個條狀圖列出了很多耗時任務(wù)的結(jié)果:1百萬次整數(shù)相等比較,。對2002年文章中講述的4種腳本解釋器,,我給出了在Java1.3.1JVM和Java1.4.2上運(yùn)行所需的時間。非常有趣的是,,測試Jython時用的是同一個版本的腳本解釋器,,結(jié)果表明新版JVM上速度提升了25%。在加上我使用了和前一次測試完全相同的硬件,,所以可以肯定JVM1.4.2減少了運(yùn)行基礎(chǔ)測試所需的時間?,F(xiàn)在看看Rhino,BeanShell和Jacl發(fā)生了什么:新版Rhino在1.4.2的JVM上比在1.3.1的JVM上運(yùn)行的舊版本快樂86%,,Jacl的這個數(shù)字是76%,。可以看出,,性能提高了很多。 四項(xiàng)任務(wù)的總時間 由于解釋器在速度方面都十分相似(至少對我的基準(zhǔn)測試是這樣),,我把各解釋器完成四項(xiàng)基準(zhǔn)測試所耗的總時間算出來并在圖2中給出,。 多變的標(biāo)志 對這些簡單測試,Rhino,,Pnuts和Jytho始終是最快的,,緊跟在后面的時Groovy,,然后是JudoScript,然后是其他的,。這些性能參數(shù)對你是否有用,,取決于你希望腳本語言做的事情。如果你的腳本函數(shù)包含大量的迭代,,并且用戶要等待結(jié)果,,你就需要關(guān)注速度最快的解釋器,或者你就該考慮用java實(shí)現(xiàn)高性能要求的算法,,而不是腳本代碼,。如果你的腳本只需要很少的重復(fù)操作,這些解釋器速度的差異就不是那么重要了,,快速的硬件也會使問題變得不同,。 還有一點(diǎn)需要指出的是,即使最快的解釋器,,完成上面測試所用的時間也是同樣功能java代碼所用時間的大約40倍,。如果速度是你最主要的問題,你必須清楚,,最有意義的事情是用java代替腳本代碼實(shí)現(xiàn)關(guān)鍵算法,。 一些腳本解釋器支持腳本代碼直接編譯成字節(jié)碼。我對這將會產(chǎn)生多大的性能差異非常好奇,,所以我進(jìn)行了另一項(xiàng)測試,。我用Rhino腳本解釋器把基準(zhǔn)測試腳本編譯成了字節(jié)碼,然后我把整個基準(zhǔn)測試集用腳本和腳本產(chǎn)生的字節(jié)碼分別運(yùn)行了10遍,。令人驚奇的是,,與直接運(yùn)行腳本相比,腳本碼編譯成字節(jié)碼再運(yùn)行僅僅節(jié)省了10%的時間,。我最初任務(wù),,JVM的魔咒占用了運(yùn)行測試集的大部分時間,但進(jìn)一步的檢查發(fā)現(xiàn)JVM魔咒本身只占測試集運(yùn)行總時間的20%,。簡單腳本代碼編譯成字節(jié)碼看起來會有積極的意義,,但這并不一定是顯著提高性能的銀彈。也許在更長的或者,,更加計算中心的腳本中,,會看到不同的結(jié)果。 第二個標(biāo)準(zhǔn):集成難度 第三個標(biāo)準(zhǔn):許可證 英文原文: http://www./javaworld/jw-03-2005/jw-0314-scripting.html |
|