BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 丁雪丰 关注 4 他的粉丝 发布于 2010年6月7日. 估计阅读时间: 3 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

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为我们带来了一个又一个的惊喜,它还能做什么?让我们拭目以待吧。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT