JRuby性能優(yōu)化的四點(diǎn)建議
越來(lái)越覺(jué)的JRuby是個(gè)很有前途的項(xiàng)目,結(jié)合Ruby簡(jiǎn)潔的語(yǔ)法和Java極其豐富的類(lèi)庫(kù),況且有團(tuán)隊(duì)持續(xù)不斷地修正bug、改進(jìn)性能,這樣的玩意完全有成為“少男殺手”的潛質(zhì)。JRuby wiki上列出了性能優(yōu)化的四條建議:
1、調(diào)優(yōu)編譯器
JRuby早就棄暗投明跟隨XRuby走上了編譯這條牛B的道路,將Ruby Script編譯成字節(jié)碼,因此這個(gè)環(huán)節(jié)是斷斷不能忽略的。
兩種編譯方式:
◆AOT模式:直接生成class文件,脫了Ruby這層皮,咱就是人見(jiàn)人“愛(ài)”的Java了。
◆JIT模式:充分利用成熟的jit技術(shù),咱不全脫,朦朧美才是真的美。默認(rèn)從0.9.9版本開(kāi)始就是開(kāi)啟的。
- jruby -J-Djruby.jit.enabled=false
2、關(guān)閉ObjectSpace
ObjectSpace是Ruby用來(lái)操作所有運(yùn)行時(shí)對(duì)象的模塊,這個(gè)功能相當(dāng)牛x。這個(gè)的實(shí)現(xiàn)在c ruby里是比較容易的,但是對(duì)于JRuby代價(jià)就比較昂貴了,其實(shí)就大部分情況下你基本用不到這個(gè)東東,那么最好就是關(guān)閉它,JRuby提供了
- jruby -J-Djruby.objectspace.enabled=false
選項(xiàng)來(lái)關(guān)閉它。
3、開(kāi)啟線(xiàn)程池
我們知道,在c ruby中的線(xiàn)程是綠色的輕量級(jí)線(xiàn)程,因此運(yùn)行時(shí)就動(dòng)不動(dòng)開(kāi)個(gè)百來(lái)十個(gè)“線(xiàn)程”跑一跑充下款爺;然而在JRuby中,線(xiàn)程的實(shí)現(xiàn)那可是實(shí)打?qū)嵉谋镜鼐€(xiàn)程(也就是Ruby線(xiàn)程與Java線(xiàn)程一比一),你這么動(dòng)不動(dòng)上百個(gè)線(xiàn)程那不慢才怪了。因此JRuby提供了線(xiàn)程池選項(xiàng),運(yùn)行時(shí)盡可能地滿(mǎn)足你的要求開(kāi)線(xiàn)程,但是當(dāng)短命的Ruby線(xiàn)程重復(fù)創(chuàng)建的時(shí)候,這些線(xiàn)程將被復(fù)用,這在大多數(shù)情況下能提高性能表現(xiàn),特別是在每次調(diào)用都啟動(dòng)一個(gè)線(xiàn)程的情況下。不過(guò)具體效果還是要測(cè)試的實(shí)際數(shù)據(jù)說(shuō)話(huà)。
- jruby -J-Djruby.thread.pooling=true
4、使用Java "server"模式虛擬機(jī),這是大家都知道的JRuby性能優(yōu)化技巧。
- jruby -J-server myscript.rb
【編輯推薦】