java8新特性探究十二nashorn犀牛_第1頁(yè)
java8新特性探究十二nashorn犀牛_第2頁(yè)
java8新特性探究十二nashorn犀牛_第3頁(yè)
java8新特性探究十二nashorn犀牛_第4頁(yè)
java8新特性探究十二nashorn犀牛_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Java8新特性探究(十二)Nashorn22014-07-13Nashorn是Nashorn是什么?如何用?性能怎樣?有什么作用?本文將對(duì)這些問(wèn)題進(jìn)行解答 關(guān)于NashornNashornVS為何要用java實(shí)現(xiàn)NashornNashorn,發(fā)音“nass-horn”,是德國(guó)二一個(gè) 名,同時(shí)也是java8新一代的javascript引擎--替代老舊,緩慢的Rhino,符合ECMAScript-2625.1版語(yǔ)言規(guī)范。你可能想javascript是運(yùn)行在web瀏覽器,提供對(duì)html各種dom操作,但是Nashorn不支持瀏覽器DOM的對(duì)象。這個(gè)需要注意的一個(gè)點(diǎn)。Nashorn主要是兩個(gè)方面,jjs工具以及javax.script包下面的jjs是在java_home/bin下面自帶的,作為例子,讓我們創(chuàng)建一個(gè)func.js,內(nèi)容如下:?function returnprint( 1運(yùn)行這個(gè)文件,把這個(gè)文件作為參數(shù)傳給? 輸出結(jié)果另一個(gè)方面是javax.script,也是以前Rhino余留下來(lái)的?ScriptEngineManagermanager newScriptEngineengine manager.getEngineByName("JavaScript"System.out.println(engine.getClass().getName()System.out.println("Result:" engine.eval("functionf() return 輸出如下:Result:2基本用法也可以去這篇博文參考一下;NashornVSjavascript運(yùn)行在jvm已經(jīng)不是新鮮事了,Rhino早在jdk6的時(shí)候已經(jīng)存在,但現(xiàn)在為何要替代Rhino,的解釋是Rhino相比其他javascript引擎(比如的V8)實(shí)在太慢了,要改造Rhino還不如重寫(xiě)。既然性能是Nashorn的一個(gè)亮點(diǎn),下面就測(cè)試下性能對(duì)比,為了對(duì)比兩者之間的性能,需要用到Esprima,一個(gè)ECMAScript解析框架,用它來(lái)解析未壓縮版的jquery(大約268kb),測(cè)試代碼如下:?staticvoidrhino(Stringparser,Stringcode)Stringsource int =456789

Contextcontext= tryScriptablescope= context.evaluateString(scope,parser,source,line,ScriptableObject.putProperty(scope,"$code",Context.jObjecttree= newObject();Objecttokens newfor(inti 0;i RUNS;++i){longstart= tree= context.evaluateString(scope,"esprimatokens= context.evaluateString(scope,"esprilongstop= System.out.println("Run#"+ +1) }}finally}staticvoidnashorn(Stringparser,String throwsScriptEngineManagerfactory=newScriptEngineengine Invocableinv (Invocable)Objectesprima Objecttree new tokens newfor(int = < ++i)long =tree inv.invokeMethod(esprima,"parse",tokens inv.invokeMethod(esprima,"tokenize",long System.out.println("Run#" + ":" //System.out.println("Datais tokens.toString() 從代碼可以看出,測(cè)試程序?qū)?zhí)行Esprima的parse和tokenize來(lái)運(yùn)試文件的內(nèi)容Rhino和Nashorn分別執(zhí)行30次,在開(kāi)始時(shí)候,Rhino需要1726ms并且慢慢加速,最終穩(wěn)定在950ms左右,Nashorn卻有另一個(gè)特色,第一次運(yùn)行耗時(shí)3682ms,但熱身后很快加速,最終每次運(yùn)行穩(wěn)定在175ms,如下圖所示nashorn首先編譯javascript代碼為java字節(jié)碼,然后運(yùn)行在jvm上,底層也是使用invokedynamic命令來(lái)執(zhí)行,所以運(yùn)行速度很給力。java這也是大部分同學(xué)關(guān)注的點(diǎn),我認(rèn)同的觀點(diǎn)是:成成JIT編譯器多線程支持豐富的標(biāo)準(zhǔn)庫(kù)和第總得來(lái)說(shuō),充分利用了java平臺(tái)的已有資源。新犀??梢哉f(shuō)是犀牛式戰(zhàn)車(chē),比Rhino速度快了許多,作為高性能的javascript運(yùn)行環(huán)境,Nashorn有很多可能。舉例,Avatar.js是依賴(lài)于Nashorn用以支持在JVM上實(shí)現(xiàn)Node.js編程模型,另外還增加了其他新的功能,如使用一個(gè)內(nèi)建的負(fù)載平衡器實(shí)現(xiàn)多循環(huán),以及使用多線程實(shí)現(xiàn)輕量消息傳遞機(jī)制;Avatar還提供了一個(gè)Model-Store,基于JPA的純粹的JavaScript

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論