越來越覺的jruby是個很有前途的項目,結合ruby的性感文法和java極其豐富的類庫,況且有團隊持續不斷地修正bug、改進性能,這樣的玩意完全有成為“少男殺手”的潛質。jruby wiki上列出了性能優化的四條建議:
1、調優編譯器,jruby早就棄暗投明跟随xruby走上了編譯這條牛b的道路,将ruby script編譯成位元組碼,是以這個環節是斷斷不能忽略的。
兩種編譯方式:
aot模式:直接生成class檔案,脫了ruby這層皮,咱就是人見人“愛”的java了。
jit模式:充分利用成熟的jit技術,咱不全脫,朦胧美才是真的美。預設從0.9.9版本開始就是開啟的,關閉的話(要我說還不如全脫)
jruby -j-djruby.jit.enabled=false
2、關閉objectspace
objectspace是ruby用來操作所有運作時對象的子產品,這個功能相當牛x。這個的實作在c ruby裡是比較容易的,但是對于jruby代價就比較昂貴了,其實就大部分情況下你基本用不到這個東東,那麼最好就是關閉它,jruby提供了
jruby -j-djruby.objectspace.enabled=false
選項來關閉它。
3、開啟線程池
我們知道,在c ruby中的線程是綠色的輕量級線程,是以運作時就動不動開個百來十個“線程”跑一跑充下款爺;然而在jruby中,線程的實作那可是實打實的本地線程(也就是ruby線程與java線程一比一),你這麼動不動上百個線程那不慢才怪了。是以jruby提供了線程池選項,運作時盡可能地滿足你的要求開線程,但是當短命的ruby線程重複建立的時候,這些線程将被複用,這在大多數情況下能提高性能表現,特别是在每次調用都啟動一個線程的情況下。不過具體效果還是要測試的實際資料說話。
jruby -j-djruby.thread.pooling=true
4、使用java "server"模式虛拟機,地球淫都知道
jruby -j-server myscript.rb
5、盡量使用最新的jdk,在我的測試中,jdk6跑jruby是效率最高的。
文章轉自莊周夢蝶 ,原文釋出時間 2008-01-31