写点什么

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:332155
用户头像

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

关注

评论

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

React源码分析(三):useState,useReducer

goClient1992

React

pandas如何读写源数据

芥末拌个饭吧

pandas python 3.5+ 10月月更

C++ | bool变量值在程序运行过程中自动篡改问题解决

中国好公民st

c++ 变量 10月月更

React面试八股文(第一期)

beifeng1996

React

Java三大特性(三)—多态

共饮一杯无

Java 多态 10月月更

嵌入式Linux下移植MT7601无线WIFI(网卡)驱动

DS小龙哥

10月月更

页面中元素的锚点定位

默默的成长

前端 Vue 3 10月月更

new Vue的时候到底做了什么

bb_xiaxia1998

Vue

你真的了解redis持久化机制AOF吗?

芥末拌个饭吧

redis 后端 10月月更

react源码中的生命周期和事件系统

flyzz177

React

使用less/css 动态的切换主题色实现换肤功能

默默的成长

前端 Vue 3 10月月更

页面中元素的吸顶

默默的成长

前端 Vue 3 10月月更

js事件循环与macro&micro任务队列-前端面试进阶

loveX001

JavaScript

聊聊运营活动的设计与实现逻辑

Java 架构 活动运营

vivo平台化实践探索之旅-平台产品系列01

vivo互联网技术

平台化 系统平台化

软件测试 | 测试开发 | Cypress 强大全新的 Web UI 测试框架应用尝鲜

测吧(北京)科技有限公司

测试

NFT链游系统开发丨Alien Worlds异形世界链游系统开发成熟技术(Demo)

I8O28578624

React循环DOM时为什么需要添加key

beifeng1996

React

最大为 N 的数字组合

掘金安东尼

算法 10月月更

深入浅出防抖与节流函数

CoderBin

JavaScript 面试 前端 防抖节流 10月月更

React源码分析(二)渲染机制

goClient1992

React

算法基础(六)| 双指针算法及模板应用

timerring

算法 双指针 10月月更

软件测试 | 测试开发 | 一文搞定 Appium 环境配置

测吧(北京)科技有限公司

测试

来自大厂 10+ 前端面试题附答案(整理版)

loveX001

JavaScript

JS模块化—CJS&AMD&CMD&ES6-前端面试知识点查漏补缺

loveX001

JavaScript

React的useLayoutEffect和useEffect执行时机有什么不同

beifeng1996

React

滴滴前端二面vue相关面试题

bb_xiaxia1998

Vue

PriorityQueue 源码解析(四)

知识浅谈

Queue 10月月更

linux下驱动开发_红外线解码驱动

DS小龙哥

10月月更

你了解Redis RDB快照吗

芥末拌个饭吧

redis 后端 10月月更

Vue的computed和watch的区别是什么?

bb_xiaxia1998

Vue

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