Charles Nutter:JRuby性能再获提升,使用JRuby实现RESTful服务

JRuby核心开发人员Charles Nutter(headius)近日在其博客中连续发表了两篇文章,介绍了最近他所做的一些有意思的事情:让JRuby更快地运行,以及如何用JRuby实现RESTful服务。

\

得益于JVM自身的性能优化能力,JRuby的性能能够满足大多数用户的需要,但人们对性能的渴望是无止尽的,自JRuby 1.1.6发布之后的18个月来,整个JRuby开发团队并没有将精力投入在提升性能,现在是时候着手让JRuby的性能更上一层楼了。

\

文章中,Charles首先对JRuby中的Call Site做了简单说明,随后给出了优化方法,他所做的工作主要是针对编译器的,具体如下:

\
  • 将动态转为静态,让编译器识别动态调用,并将其转为静态调用。\
  • 减少Fixnum的使用,在一些调用路径中使用原子类型值而非封装过的RubyFixnum对象。\
  • 检测自我递归,直接进行递归调用,而非将其放入动态管道中。\

Charles表示,这样的优化对JRuby的兼容性有一些影响,例如会损坏Ruby的函数调用堆栈等。

\

在传统的Ruby中要实现REST,Rails自然是首选,而在Java的世界中情况还不明朗,不过JSR-311(JAX-RS)正试图统一标准,Charles在他的另一篇博客中演示了如何在JRuby中通过Jersey来实现RESTful服务。

\

在这个演示中,他用JRuby重写了Jersey入门文档中的范例,其中还使用了一些JRuby 1.5的新特性。只需几条语句就能实现一个RESTful服务:

\
require 'java'
\java_import 'javax.ws.rs.Path'
\java_import 'javax.ws.rs.GET'
\java_import 'javax.ws.rs.Produces'

\java_package 'com.headius.demo.jersey'


\java_annotation 'Path(\"/helloworld\")'
\class HelloWorld
\java_annotation 'GET'
\java_annotation 'Produces(\"text/plain\")'
\def cliched_message
\ \"Hello World\"
\end
\end
\

经过jrubyc的编译,这段代码就能成为一个“真正”的Java类。随后再通过一个简单的服务器程序和一些CLASSPATH设置,就能看到亲切的“Hello World”了。

\

JRuby为我们带来了一个又一个的惊喜,它还能做什么?让我们拭目以待吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值