写点什么

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

  • 2010-06-06
  • 本文字数:830 字

    阅读完需:约 3 分钟

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

2010-06-06 09:332183
用户头像

发布了 135 篇内容, 共 67.2 次阅读, 收获喜欢 43 次。

关注

评论

发布
暂无评论
发现更多内容

为什么数字钱包需要引入小程序生态

Speedoooo

小程序 第三方支付 小程序容器 移动钱包

5个 Istio 访问外部服务流量控制最常用的例子,你知道几个?

万猫学社

云原生 istio envoy Istio流量管理

“稚晖君”为2022昇腾AI创新大赛打call 期待广大开发者加入

极客天地

说了半天跨平台,今儿咱就来跨跨!(完结篇)——Kubernetes上手实践

为自己带盐

Docker WSL2 k8s入门 签约计划第三季 8月月更

基于设计稿识别的可视化低代码系统实践

Shopee技术团队

前端 设计 低代码

视频是主动学习吗?

FunTester

阿里云张新涛:支持沉浸式体验应用快速落地,阿里云云XR平台发布

阿里云弹性计算

视觉计算 云XR平台 沉浸式体验 GPU实例

【React源码系列】全网最详细的React异常捕获及处理机制

爱切图的木子老师

前端 React react源码 异常捕获

shell之变量详解,让你秒懂!

Albert Edison

Linux centos 运维 shell脚本编程 8月月更

图解VirtualBox安装CentOS 7

万猫学社

Centos 7 virtualbox

SpringMVC(三、JDBCTemplate)

开源 springmvc 8月月更

开源一夏 | 对于Angular表达式以及重要指令的研究心得【前端实战Angular框架】

恒山其若陋兮

开源 8月月更

论文分享:「FED BN」使用LOCAL BATCH NORMALIZATION方法解决Non-iid问题

隐语SecretFlow

密码学和算法 机器学习/深度学习

重要的不是成为海贼王,而是像路飞一样去冒险

沃德

十步以内,用小程序快速生成App!

Geek_99967b

小程序

分贝通SAAS企业大数据体系建设经验分享

阿里云大数据AI技术

大数据

分享 6 个 Vue3 开发必备的 VSCode 插件

Geek_z9ygea

vue.js 前端 vscode vuejs

2022Nginx实战教程,由浅入深

LoneWalker、

nginx

毕昇编译器优化:Lazy Code Motion

华为云开发者联盟

云计算 后端 表达式 毕昇编译器

Go-Excelize API源码阅读(五)—— Close()

Regan Yue

Go 开源 源码刨析 8月日更 8月月更

ebook下载 | 《 企业高管IT战略指南——企业为何要落地DevOps》

York

云计算 DevOps 云原生 数字化转型 降本增效

2022 首期线下 Workshop!面向应用开发者们的数据应用体验日来了 | TiDB Workshop Day

TiDB 社区干货传送门

“车家互联”新态势,小程序实现物联网多场景互通

Speedoooo

小程序 智能家居 小程序容器 电动车

对数学直观、感性的认知是理解数学、喜爱数学的必经之路,这本书做到了!

图灵教育

高中数学

winpe工具WEPE微PE工具箱

肖飞码字

windows 操作系统

10个 Istio 流量管理 最常用的例子,你知道几个?

万猫学社

云原生 istio envoy Istio流量管理

开源一夏 | 基于若依架构的列表详情展示

六月的雨在InfoQ

bootstrap 开源 若依 8月月更

开源一夏 | Mysql开启ssl加密协议及Java客户端配置操作指南

六月的雨在InfoQ

MySQL 开源 SSL证书 SSL 连接 8月月更

在“企业通讯录”的盲区,融云的边界与分寸

融云 RongCloud

企业 IM im开发

Charles Nutter:JRuby性能再获提升,使用JRuby实现RESTful服务_Java_丁雪丰_InfoQ精选文章