맨위로가기

JRuby

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

JRuby는 자바 가상 머신(JVM)에서 실행되는 루비 프로그래밍 언어의 구현체이다. 2001년 얀 아르네 페테르센에 의해 처음 개발되었으며, Ruby 1.6의 C 코드를 직접 포팅한 것으로 시작되었다. JRuby는 Ruby 1.6부터 3.1까지 다양한 Ruby 버전과의 호환성을 지원하며, JIT 및 AOT 컴파일을 통해 성능을 향상시켰다. JRuby는 Rails, RSpec, Rake, RubyGems 등 다양한 프레임워크를 지원하며, 자바 코드를 직접 호출할 수 있는 기능을 제공한다. 2006년 Rails를 지원하기 시작했으며, 2009년 썬 마이크로시스템즈의 핵심 개발자들이 엔진 야드에 합류하여 개발이 더욱 활발해졌다.

더 읽어볼만한 페이지

  • 루비 (프로그래밍 언어) - 마츠모토 유키히로
    마츠모토 유키히로는 루비 프로그래밍 언어를 창시하고 주요 개발자로 활동하며 MRI, mruby, streem 등 다양한 프로그래밍 언어 및 관련 기술 개발에 기여한 인물로, 오픈소스 소프트웨어 커뮤니티에 대한 공헌과 루비 온 레일즈의 성공으로 세계적인 인정을 받았다.
  • 루비 (프로그래밍 언어) - 루비포지
    루비포지는 루비 센트럴이 운영하며 오픈 소스 루비 언어 관련 홍보를 지원하는 웹사이트였으나, 2014년 5월 15일에 서비스가 종료되었다.
  • JVM 프로그래밍 언어 - 코틀린 (프로그래밍 언어)
    코틀린은 젯브레인즈에서 개발한 정적 타입 언어로, 자바 가상 머신에서 동작하며 자바와의 호환성을 갖고, 안드로이드 공식 지원 언어로 채택되어 다양한 분야에서 활용되고 있으며, 이름은 러시아의 코틀린 섬에서 유래되었다.
  • JVM 프로그래밍 언어 - 자바 (프로그래밍 언어)
    자바는 제임스 고슬링 등에 의해 개발된 객체 지향 프로그래밍 언어로, 다양한 플랫폼에서 실행 가능하며 샌드박스 모델 기반의 보안 기능, 자동 메모리 관리, 멀티스레딩 등을 지원한다.
  • 이클립스 라이선스 소프트웨어 - JUnit
    JUnit은 자바 환경에서 단위 테스트를 위한 프레임워크로, 반복적인 테스트 실행을 통해 버그 수정에 용이하며, 어노테이션 기반의 간편한 테스트 코드 작성과 IDE 통합을 지원하여 개발 효율성을 높인다.
  • 이클립스 라이선스 소프트웨어 - Eclipse (소프트웨어)
    이클립스는 IBM에서 개발한 자바 기반의 통합 개발 환경으로, OSGi 서비스 플랫폼을 런타임 아키텍처로 사용하며, 플러그인을 통해 기능을 확장할 수 있고, 이클립스 퍼블릭 라이선스를 따르며, 한국어를 지원한다.
JRuby - [IT 관련 정보]에 관한 문서
기본 정보
JRuby 로고
JRuby 로고
개발자Charles Oliver Nutter, Thomas Enebo, Ola Bini, Nick Sieger
첫 번째 출시2001년
최신 안정화 버전9.4.5.0
최신 안정화 버전 출시일2023년 11월 2일
프로그래밍 언어Ruby, Java
운영체제크로스 플랫폼
플랫폼자바 가상 머신
종류Ruby 프로그래밍 언어 인터프리터
라이선스EPL/GPL/LGPL
공식 웹사이트JRuby 공식 웹사이트

2. 역사

JRuby는 2001년 얀 아르네 페테르센(Jan Arne Petersen)에 의해 처음 개발되었다. 초기에는 Ruby 1.6 C 코드의 직접적인 포팅이었으나, Ruby 1.8.6 버전이 출시되면서 해당 버전에 맞게 업데이트하는 작업이 시작되었다. 2001년부터 여러 기여자들이 프로젝트에 참여했으며, 시간이 지나면서 핵심 개발팀이 구성되어 프로젝트를 이끌었다.

JRuby 1.1 버전에서는 JIT 컴파일과 AOT 컴파일 모드를 도입하며 성능을 개선했고,[6] 주요 리눅스 배포판인 페도라 9에 표준 패키지로 포함되기도 했다(JRuby 1.1.1).[7][8] 개발 과정에서 썬 마이크로시스템즈 소속이었던 핵심 개발자들(찰스 올리버 너터, 토마스 에네보, 닉 시거)이 2009년 엔진 야드로,[4][9] 이후 2012년 너터와 에네보는 레드햇으로 이동하며[5] JRuby 개발을 이어갔다.

JRuby는 루비 MRI 버전 1.6부터 시작하여 지속적으로 호환성을 높여왔으며, JRuby 9.0.0.0 버전(2015년)에서는 Ruby 2.2를 지원했다. 현재 버전(9.4.3.0)은 Ruby 3.1을 대상으로 개발되고 있다.[10] NetBeans Ruby Pack과 같은 통합 개발 환경 지원도 이루어졌다. 버전 1.1.1 이후로는 포인트 릴리스를 자주 실시하여 사용자 피드백에 신속하게 대응하고 있다.

2. 1. 주요 발전 과정

JRuby는 2001년 얀 아르네 페테르센(Jan Arne Petersen)이 처음 개발했다. 초기 버전은 Ruby 1.6의 C 코드를 직접 이식한 것이었다. Ruby 1.8.6이 출시되면서 JRuby를 1.8.6 버전의 기능과 의미 체계에 맞게 업데이트하는 작업이 시작되었다. 2001년부터 여러 개발자들이 프로젝트에 기여했으며, 현재는 약 6명으로 구성된 핵심 팀이 개발을 이끌고 있다.

JRuby 1.1 버전에서는 JIT 컴파일과 AOT 컴파일 모드가 추가되어, 당시 Ruby 레퍼런스 구현 1.8.7 버전보다 대부분의 경우 더 빠른 성능을 보여주었다.[6] JRuby 1.1.1 버전은 페도라 9에 표준 패키지로 포함된 최초의 배포판 중 하나였다.[7][8]

2009년 7월, 당시 썬 마이크로시스템즈 소속의 핵심 JRuby 개발자였던 찰스 올리버 너터, 토마스 에네보, 닉 시거는 JRuby 개발을 계속하기 위해 엔진 야드로 이직했다.[4][9] 이후 2012년 5월, 너터와 에네보는 레드햇으로 다시 이직하여 JRuby 관련 작업을 이어갔다.[5]

JRuby는 루비 MRI 버전 1.6부터 1.9.3까지의 호환성을 지원해왔다. JRuby 1.0은 Ruby 1.8.6을 지원했으며, JRuby 1.4.0에서는 Ruby 1.8.7로 호환성이 업데이트되었다. JRuby 1.6.0은 Ruby 1.9.2에 대한 동시 지원을 추가했고, JRuby 1.7.0부터는 Ruby 1.9.3을 기본 실행 모드로 설정했다 (Ruby 1.8.7 호환성은 명령줄 플래그를 통해 사용 가능). JRuby 9.0.0.0 버전은 Ruby 2.2를 지원한다.

JRuby의 현재 버전(9.4.3.0)은 Ruby 3.1을 대상으로 개발 중이며, 일부 3.1 기능은 아직 구현 중이다.[10]

아래 표는 JRuby의 주요 릴리스와 특징을 보여준다. 버그 수정이나 성능 개선 위주의 마이너 릴리스는 제외되었다.

릴리스릴리스 날짜주요 특징
0.92006년 8월 1일Rails 지원[11]
1.12008년 3월 28일Ruby MRI 1.8.7보다 우수한 성능[6]
AOT 모드 및 JIT 모드[41]
1.1.42008년 8월 28일리팩토링된 Java 통합 레이어
Ruby 1.9 지원 시작
FFI 서브시스템을 통해 C 라이브러리 호출[22]
1.2.0[23]2009년 3월 16일Ruby 1.9를 위한 JIT 컴파일러
Ruboto 프로젝트를 통한 초기 Android 지원.
1.3.0[24]2009년 6월 3일GAE/J와 같이 제한된 환경에서 더 잘 실행됨
1.4.0[25][26]2009년 11월 2일Windows 네이티브 런처 및 Windows 설치 프로그램
Ruby 1.8.7 지원
1.5.0[27]2010년 5월 12일UNIX 기반 플랫폼용 네이티브 런처
Ant 지원 및 Rake-Ant 통합
표준 라이브러리, RubyGems, 및 RSpec 업데이트
1.6.0[28]2011년 3월 15일Ruby 1.9.2 언어 및 API 호환성
내장 프로파일러
Ruby의 C API를 기반으로 한 C 확장 지원(실험적)
1.7.0[21]2012년 10월 22일Ruby 1.9.3 언어가 기본 모드
invokedynamic 지원
1.7.4[29]2013년 5월 16일실험적 Ruby 2.0 지원 (대부분의 기능 및 stdlib 포함)
9.0.0.0[30]2015년 7월 22일Ruby 2.x 지원
새로운 최적화 런타임
새로운 POSIX 친화적인 IO 및 Process
MRI에서 인코딩/트랜스코딩 로직을 완전히 이식
9.1.7.0[31]2017년 1월 11일여러 스레드를 사용할 때 심각한 LinkageError 수정
여러 키워드 인수 문제 수정
여러 파서 문제 수정
JIT의 메모리 사용량 감소
Psych를 2.2.2로 업데이트
jruby-openssl을 0.9.18로 업데이트
72개 문제 수정
9.2.0.0[32]2018년 5월 24일Ruby 2.5 언어 지원
9.2.9.0[33]2019년 10월 30일Ruby 2.5.7 언어 지원
9.3.2.0[34]2021년 12월 2일Ruby 2.6.x 언어 지원
9.3.3.0[35]2022년 1월 19일Ruby 2.6.x 언어 지원
9.3.4.0[36]2022년 3월 23일Ruby 2.6.x 언어 지원
9.4.0.0[37]2022년 11월 22일Ruby 3.1 언어 지원
9.4.1.0[38]2023년 2월 7일Ruby 3.1 언어 지원
9.4.2.0[39]2023년 3월 8일Ruby 3.1 언어 지원
9.4.3.0[40]2023년 6월 7일Ruby 3.1 언어 지원


2. 2. Ruby on Rails

JRuby는 0.9 버전(2006년 5월)부터 루비 온 레일스 웹 프레임워크를 실행할 수 있었으며, 동시에 루비젬스와 WEBrick도 실행할 수 있었다.[11][12][62][63] 에서 두 명의 수석 개발자를 고용한 이후, Rails 호환성과 속도가 크게 향상되었다. JRuby 1.0 버전은 Rails 자체의 거의 모든 테스트 케이스를 성공적으로 통과했으며,[13][64] 이후 개발자들은 JRuby를 프로덕션 환경의 Rails 애플리케이션에 사용하기 시작했다.[14][65]

또한, NetBeans 6.0부터 사용 가능해진 NetBeans Ruby Pack은 Ruby 및 JRuby의 통합 개발 환경으로 사용될 뿐만 아니라, 두 구현 환경에서의 루비 온 레일스 개발 환경으로도 활용될 수 있다.

2. 3. Multiple virtual machine collaboration

2008년 2월 27일, 썬 마이크로시스템즈도쿄 대학은 하나의 인터프리터에서 하나 이상의 루비 또는 JRuby 애플리케이션을 동시에 실행할 수 있는 가상 머신 구현을 위한 공동 연구 프로젝트를 발표했다.[15][66]

2. 4. Dynamic invocation on Java Virtual Machines

JSR 292 ('자바TM 플랫폼에서 동적으로 타입이 지정된 언어 지원')[16]JVM 수준에서 새로운 invokedynamic 명령어를 추가하여 동적 타입 검사를 사용한 메서드 호출을 가능하게 하고, 런타임에 클래스와 메서드를 동적으로 변경할 수 있도록 제안한다.

의 오픈 소스 프로젝트인 다 빈치 머신은 이 JSR의 프로토타입 제작을 목표로 했다.[17] 첫 번째 작동하는 프로토타입은 OpenJDK에 대한 패치로 개발되었으며, 2008년 8월 말에 발표되어 공개되었다.[18][19]

JRuby 팀은 동적 호출 기능을 코드베이스에 구현했다. 이 기능은 처음에 JRuby 1.1.5 릴리스와 함께 원시적인 형태로 제공되었으며,[20] 버전 1.7.0부터는 Java 8 빌드에서 기본적으로 활성화되었다.[21]

2. 5. Release history

JRuby는 2001년 얀 아르네 페테르센(Jan Arne Petersen)에 의해 처음 개발되었다. 초기 몇 년간 코드는 Ruby 1.6 C 코드의 직접적인 포팅이었다. Ruby 1.8.6 출시 이후, JRuby를 1.8.6 버전의 기능과 의미 체계에 맞게 업데이트하려는 노력이 시작되었다. 2001년부터 여러 기여자들이 프로젝트에 참여했으며, 2012년 기준으로 약 6명의 핵심 팀원이 활동하고 있다.

JRuby 1.1 버전에서는 JIT 컴파일과 AOT 컴파일 모드가 추가되었다. 이 버전은 당시의 Ruby 1.8.7 레퍼런스 구현보다 대부분의 경우 더 빠른 성능을 보였다.[6]

JRuby 패키지는 대부분의 플랫폼에서 사용 가능하다. 페도라 9는 JRuby 1.1.1을 표준 패키지로 포함한 최초의 배포판 중 하나였다.[7][8]

2009년 7월, 당시 썬 마이크로시스템즈 소속의 핵심 JRuby 개발자였던 찰스 올리버 너터(Charles Oliver Nutter), 토마스 에네보(Thomas Enebo), 닉 시거(Nick Sieger)는 JRuby 개발을 계속하기 위해 엔진 야드(Engine Yard)로 이직했다.[4][9] 2012년 5월, 너터와 에네보는 레드햇에서 JRuby 관련 작업을 하기 위해 엔진 야드를 떠났다.[5]

JRuby는 MRI 버전 1.6부터 1.9.3까지 호환성을 지원해왔다. JRuby 1.0은 Ruby 1.8.6을 지원했고, JRuby 1.4.0은 Ruby 1.8.7 호환성을 추가했다. JRuby 1.6.0은 Ruby 1.9.2에 대한 동시 지원을 추가했으며, JRuby 1.7.0부터는 Ruby 1.9.3을 기본 실행 모드로 설정했다(Ruby 1.8.7 호환성은 명령줄 플래그를 통해 사용 가능). JRuby 9.0.0.0 버전은 Ruby 2.2 지원을 추가했다.

JRuby의 현재 버전(9.4.3.0)은 Ruby 3.1을 대상으로 하며, 일부 3.1 기능은 아직 개발 중이다.[10]

JRuby는 0.9 버전(2006년 5월)부터 루비 온 레일즈 웹 프레임워크를 실행할 수 있었고,[11][12] RubyGems와 WEBrick 실행도 가능했다. 썬 마이크로시스템즈가 두 명의 수석 개발자를 고용한 이후, 레일즈 호환성과 속도가 크게 향상되었다. JRuby 1.0 버전은 레일즈 자체의 거의 모든 테스트 케이스를 성공적으로 통과했다.[13] 이후 개발자들은 프로덕션 환경의 레일즈 애플리케이션에 JRuby를 사용하기 시작했다.[14]

아래 표는 JRuby 역사의 주요 단계를 보여주는 릴리스를 나타낸다. 주로 버그 수정이나 성능 개선에 초점을 맞춘 릴리스는 제외되었다. 성능 향상은 거의 모든 릴리스에서 이루어졌기 때문에 별도로 표시하지 않았다.

릴리스릴리스 날짜주요 특징
0.92006년 8월 1일레일즈 지원[11]
1.12008년 3월 28일Ruby MRI 1.8.7보다 우수한 성능[6]
AOT 모드 및 JIT 모드[41]
1.1.42008년 8월 28일리팩토링된 Java 통합 레이어
Ruby 1.9 지원 시작
FFI 서브시스템을 통해 C 라이브러리 호출[22]
1.2.0[23]2009년 3월 16일Ruby 1.9를 위한 JIT 컴파일러
Ruboto 프로젝트를 통한 초기 안드로이드 지원.
1.3.0[24]2009년 6월 3일GAE/J와 같이 제한된 환경에서 실행 개선
1.4.0[25][26]2009년 11월 2일Windows 네이티브 런처 및 Windows 설치 프로그램
Ruby 1.8.7 지원
1.5.0[27]2010년 5월 12일유닉스 기반 플랫폼용 네이티브 런처
Ant 지원 및 Rake-Ant 통합
표준 라이브러리, RubyGems, 및 RSpec 업데이트
1.6.0[28]2011년 3월 15일Ruby 1.9.2 언어 및 API 호환성
내장 프로파일러
Ruby의 C API를 기반으로 한 C 확장 지원(실험적)
1.7.0[21]2012년 10월 22일Ruby 1.9.3 언어가 기본 모드
invokedynamic 지원
1.7.4[29]2013년 5월 16일실험적 Ruby 2.0 지원 (대부분의 기능 및 표준 라이브러리 포함)
9.0.0.0[30]2015년 7월 22일Ruby 2.x 지원
새로운 최적화 런타임
새로운 POSIX 친화적인 IO 및 Process
MRI에서 인코딩/트랜스코딩 로직을 완전히 이식
9.1.7.0[31]2017년 1월 11일여러 스레드를 사용할 때 심각한 LinkageError 수정
여러 키워드 인수 문제 수정
여러 파서 문제 수정
JIT의 메모리 사용량 감소
Psych를 2.2.2로 업데이트
jruby-openssl을 0.9.18로 업데이트
72개 문제 수정
9.2.0.0[32]2018년 5월 24일Ruby 2.5 언어 지원
9.2.9.0[33]2019년 10월 30일Ruby 2.5.7 언어 지원
9.3.2.0[34]2021년 12월 2일Ruby 2.6.x 언어 지원
9.3.3.0[35]2022년 1월 19일Ruby 2.6.x 언어 지원
9.3.4.0[36]2022년 3월 23일Ruby 2.6.x 언어 지원
9.4.0.0[37]2022년 11월 22일Ruby 3.1 언어 지원
9.4.1.0[38]2023년 2월 7일Ruby 3.1 언어 지원
9.4.2.0[39]2023년 3월 8일Ruby 3.1 언어 지원
9.4.3.0[40]2023년 6월 7일Ruby 3.1 언어 지원


3. 설계

2006년 초부터 JRuby 핵심 팀은 기존의 C 언어 코드를 단순 이식하는 방식에서 벗어나, 성능을 높이고 최종적으로 자바 바이트코드로 컴파일하는 것을 목표로 삼았다. 이를 위해 Ruby on Rails를 수정 없이 JRuby에서 실행하는 것을 구체적인 목표로 설정했다. 이 목표를 달성하는 과정에서 테스트 스위트를 확장하여 JRuby의 정확성에 대한 확신을 얻을 수 있었다. 이를 바탕으로 2006년 말과 2007년 초에는 JRuby 핵심 하위 시스템에 대한 복잡한 재설계와 리팩토링을 시작했다.

JRuby는 Ruby를 위한 혼합 모드 가상 머신으로 설계되었다. 코드를 직접 인터프리터 방식으로 해석하거나, 런타임에 자바 바이트코드로 JIT(Just-in-time) 컴파일하거나, 실행 전에 자바 바이트코드로 AOT(Ahead-of-time) 컴파일하는 방식을 사용할 수 있다. 2007년 10월 이전까지는 인터프리터 모드만 모든 Ruby 구문을 지원했으나, 버전 1.1부터는 완전한 AOT/JIT 컴파일러를 사용할 수 있게 되었다.[72] 컴파일러는 인터프리터 코드와 컴파일된 코드가 함께 실행될 수 있도록 설계되었으며, 필요시 재최적화를 위해 디컴파일하는 기능과 생성된 바이트코드를 자바 클래스 파일로 출력하는 기능도 지원한다.

4. 프레임워크 지원

JRuby는 Rails, RSpec, Rake, RubyGems를 내장 지원한다. 젬(gem)으로 묶인 C 라이브러리의 사용을 허용하기 위해 FFI 하위 시스템을 내장하고 있다. 또한 대화형 루비 셸 (irb)을 Ruby MRI와 동일하게 실행할 수 있다.

넷빈즈 6에서 사용 가능했던 넷빈즈 루비 팩은 루비와 JRuby, 그리고 루비 온 레일스를 지원하며 두 가지 루비 구현을 위한 IDE 개발을 가능하게 했다.[42][43] 이는 넷빈즈 7.0 이상에는 더 이상 포함되지 않는다.

5. 프로그래밍

JRuby는 기본적으로 Ruby 인터프리터이지만, Java로 구현되었다는 점이 다르다. JRuby와 Ruby는 기본적으로 같지만, JRuby에서는 Java와의 긴밀한 연계가 가능하다.[73]

5. 1. Ruby와 Java의 만남

JRuby는 표준 루비 인터프리터와 유사하지만, 자바로 작성되었다는 점이 다르다. JRuby는 루비와 동일하게 객체 지향 프로그래밍 및 동적 타이핑과 같은 개념을 특징으로 한다. 주요 차이점은 JRuby가 자바와 긴밀하게 통합되어 자바 프로그램에서 직접 호출할 수 있다는 것이다.[44] 자바는 웹 애플리케이션 개발에서 상당한 입지를 가지고 있다.

5. 2. JRuby에서 Java 호출

JRuby의 강력한 기능 중 하나는 자바 플랫폼의 클래스를 직접 호출할 수 있다는 점이다. 이를 위해서는 먼저 JRuby의 자바 지원을 로드해야 하는데, 최신 버전에서는 `include Java`를 사용하고 이전 버전에서는 `require 'java'`를 사용했다.

다음은 자바의 `javax.swing.JFrame`에 `javax.swing.JLabel`을 부착하여 간단한 GUI 창을 생성하는 예제 코드이다.



include Java # 이전 버전에서는 require 'java'

# JFrame 객체 생성

frame = javax.swing.JFrame.new()

# JLabel 객체를 생성하여 프레임의 콘텐트 팬(content pane)에 추가

frame.getContentPane().add(javax.swing.JLabel.new('Hello, World!'))

# 창을 닫을 때 프로그램이 종료되도록 설정

frame.setDefaultCloseOperation(javax.swing.JFrame::EXIT_ON_CLOSE)

# 컴포넌트 크기에 맞춰 프레임 크기 조정

frame.pack()

# 프레임을 화면에 보이도록 설정

frame.set_visible(true)



또한, JRuby는 자바 코드를 호출할 때 Ruby 스타일의 밑줄 명명 규칙(snake_case)을 사용할 수 있게 해주며, JavaBean의 속성(property)에도 마치 루비 객체의 속성처럼 접근할 수 있다. 예를 들어, 위의 코드에서 `getContentPane()` 대신 `content_pane`을, `set_visible(true)` 대신 `visible = true`와 같이 사용할 수 있다.



# 밑줄 명명 규칙 및 속성 접근 방식 사용 예시

# frame.content_pane.add label # 'label' 변수가 미리 정의되어 있다고 가정

# frame.visible = true


5. 3. Java에서 JRuby 호출

JRuby는 JSR 223[45] Scripting for Java 6 또는 아파치 빈 스크립팅 프레임워크를 사용하여 자바에서 호출할 수 있다.[74]

다음은 Java 6용 JSR 223 스크립팅을 사용한 예제이다.



// Java 6용 JSR 223 스크립팅 사용 예제

ScriptEngineManager mgr = new ScriptEngineManager();

ScriptEngine rbEngine = mgr.getEngineByExtension("rb");

try {

rbEngine.eval("puts 'Hello World!'");

} catch (ScriptException ex) {

ex.printStackTrace();

}



더 자세한 내용은 [https://github.com/jruby/jruby/wiki JRuby Wiki]에서 확인할 수 있다.

6. 성능

일부 벤치마크에 따르면 JRuby는 다른 대안보다 빠르다. 그러나 구현은 실행 전에 얼마나 많은 코드를 로드하는지에 따라 다르므로, 속도를 측정하는 다양한 방법은 성능 이점의 편향된 해석으로 이어질 수 있다. 자바 가상 머신 자체를 로드하는 데 걸리는 시간은 벤치마크를 계산할 때 종종 실행 시간에서 제외된다.

JRuby는 전역 인터프리터 락(GIL)에 의해 제한되지 않고 JVM 스레드를 활용할 수 있는 아키텍처적 이점을 가진다. 이는 Rubinius와 유사하게 프로세스 내 완전한 병렬 처리를 가능하게 하며, OS 스레드를 활용하는 Ruby MRI와는 대조적이다.

JRuby는 인터프리터 모드, AOT(Ahead-Of-Time) 모드, JIT(Just-In-Time) 모드를 지원하며, 버전 1.1부터 JIT 및 AOT 컴파일을 사용할 수 있다.[72] 각 모드에 따른 성능 특성은 다음과 같다.


  • 인터프리터 모드: 이 모드에서 JRuby는 표준 Ruby 참조 구현보다 느린 경향이 있다.[75] 예를 들어, Rails 처리를 인터프리터 모드로 실행하면 Ruby 1.8 참조 구현 대비 50%에서 70% 느리며, Java 6 환경의 Ruby 1.9 (YARV) 벤치마크에서는 (시작 시간 포함 시) JRuby가 4배 느리다는 결과도 있다.[76]

  • JIT 모드: JRuby 1.1부터 사용 가능한 JIT 모드는 여러 벤치마크에서 Ruby 1.8 레퍼런스 구현보다 빠른 성능을 보인다.[77][56][78] Ruby 1.9보다는 느리다는 결과도 있지만[57], JRuby 팀은 1.1 버전이 일부 벤치마크에서는 Ruby 1.9를 능가한다고 주장했다.[79] 특히 실제 애플리케이션 환경에서는 성능 이점이 두드러질 수 있다. 2007년 몽그렐 웹 서버 애플리케이션 테스트에서 JVM 시작 완료 후 JRuby는 Ruby MRI 1.8보다 우수한 성능을 보였다.[46][80] 서버 VM 환경에서 각종 최적화를 적용하면 실행 속도가 크게 향상되어, Ruby 1.8.6보다 50배, Ruby 1.9.1보다 10배 빠른 속도를 기록했다는 보고도 있다.[81]

  • 버전별 비교:
  • 2007년 Ruby 구현 벤치마크에서는 JRuby가 일부 테스트에서 Ruby MRI 1.8보다 빨랐지만, YARV가 전반적으로 더 우수한 성능을 보였다.[47]
  • 2014년 4월 기준, 더 컴퓨터 랭귀지 벤치마크 게임에서는 JRuby 1.7.4가 일반적으로 Ruby MRI 2.1.0과 비슷한 성능을 보였으나, 더 많은 메모리를 사용하는 경향이 나타났다.[48][49]


결론적으로 JRuby의 성능은 실행 모드, 최적화 수준, 특정 작업 부하에 따라 달라지며, 특히 병렬 처리와 JIT 컴파일 환경에서 강점을 보인다.

참조

[1] 웹사이트 Releases · jruby/jruby https://github.com/j[...] 2023-12-26
[2] 웹사이트 Sun Welcomes JRuby Developers https://web.archive.[...] On the Record 2006-09-07
[3] 웹사이트 ThoughtWorks http://ola-bini.blog[...] On the Record
[4] 간행물 Sun's JRuby Team Jumps Ship to Engine Yard http://www.pcworld.c[...] 2009-07-28
[5] 웹사이트 Red Hat lures in JRuby power pair https://www.theregis[...] 2012-05-23
[6] 웹사이트 The Great Ruby Shootout http://antoniocangia[...] 2007-03-12
[7] 웹사이트 JRuby 1.1.1 in RedHat Fedora http://headius.blogs[...] 2008-04-25
[8] 웹사이트 jruby http://admin.fedorap[...] fedoraproject.org
[9] 웹사이트 JRuby's Future at Engine Yard https://web.archive.[...] 2009-07-28
[10] 웹사이트 Unfinished Ruby 3.1 features https://github.com/j[...] JRuby Team
[11] 웹사이트 Rails Support https://web.archive.[...] JRuby Team
[12] 웹사이트 Zero to Production in 15 Minutes http://blog.headius.[...] 2008-08-24
[13] Webarchive 98.6% of the 2,807 Rails-specific test cases execute successfully; see JRuby 0.9.8 Released https://web.archive.[...] 2015-05-22
[14] 웹사이트 Success Stories https://github.com/j[...] JRuby Wiki on GitHub 2011-01-05
[15] 웹사이트 The University of Tokyo and Sun Microsystems Commence Joint Research Projects on High Performance Computing and Web-based Programming Languages http://www.sun.com/a[...] Sun Microsystems 2008-02-27
[16] JSR see JSR 292 http://www.jcp.org/e[...]
[17] 웹사이트 Sub-Projects and Investigations http://openjdk.java.[...] Sun Microsystems
[18] 웹사이트 Happy International Invokedynamic Day! https://blogs.oracle[...] 2008-08-26
[19] 웹사이트 Dynamic Invocation Runs on OpenJDK http://www.infoq.com[...] infoq.com 2008-09-01
[20] 웹사이트 A First Taste of InvokeDynamic http://blog.headius.[...] 2008-09-11
[21] 웹사이트 JRuby 1.7.0 Released https://web.archive.[...] JRuby Team 2012-10-22
[22] 웹사이트 JRuby 1.1.4 Released http://www.bloglines[...] 2008-08-28
[23] 웹사이트 JRuby 1.2.0 Released https://web.archive.[...] JRuby Team 2009-03-16
[24] 웹사이트 JRuby 1.3.0 Released https://web.archive.[...] JRuby Team 2009-06-03
[25] 웹사이트 JRuby 1.4.0 Released http://www.jruby.org[...] JRuby Team 2009-11-02
[26] 웹사이트 JRuby 1.4.0 Released https://web.archive.[...] adtmag.com 2009-11-10
[27] 웹사이트 JRuby 1.5.0 Released https://web.archive.[...] JRuby Team 2010-05-12
[28] 웹사이트 JRuby 1.6.0 Released http://www.jruby.org[...] JRuby Team 2011-03-15
[29] 웹사이트 JRuby 1.7.4 Released http://www.jruby.org[...] JRuby Team 2013-05-16
[30] 웹사이트 JRuby 9.0.0.0 Released https://web.archive.[...] JRuby Team 2015-07-22
[31] 웹사이트 JRuby 9.1.7.0 Released — JRuby.org https://web.archive.[...]
[32] 웹사이트 JRuby 9.2.0.0 Released https://web.archive.[...]
[33] 웹사이트 JRuby 9.2.9.0 Released https://www.jruby.or[...]
[34] 웹사이트 JRuby 9.3.2.0 Released https://www.jruby.or[...]
[35] 웹사이트 JRuby 9.3.3.0 Released https://www.jruby.or[...]
[36] 웹사이트 JRuby 9.3.4.0 Released https://www.jruby.or[...] 2022-03-23
[37] 웹사이트 JRuby 9.4.0.0 Released https://www.jruby.or[...] 2022-12-01
[38] 웹사이트 JRuby 9.4.1.0 Released https://www.jruby.or[...] 2023-02-15
[39] 웹사이트 JRuby 9.4.2.0 Released https://www.jruby.or[...] 2023-06-13
[40] 웹사이트 JRuby 9.4.3.0 Released https://www.jruby.or[...] 2023-06-13
[41] 웹사이트 The Compiler Is Complete http://headius.blogs[...] 2007-10-12
[42] 웹사이트 Ruby & JRuby Support Available in NetBeans IDE http://www.netbeans.[...] netbeans.org 2009-07-04
[43] 웹사이트 Ruby brightens the NetBeans platform http://www.infoworld[...] infoworld.com 2008-07-04
[44] 웹사이트 Ruby for the Java world https://www.infoworl[...] 2006-07-17
[45] 문서 JSR 223: Scripting for the Java Platform Specification Request http://jcp.org/about[...]
[46] 웹사이트 JRuby on Rails: Fast Enough http://blog.nicksieg[...] 2007-10-28
[47] 웹사이트 The Great Ruby Shootout http://programmingze[...] 2014-02-02
[48] 웹사이트 JRuby compared to Ruby 1.9, Computer Language Benchmarks Game (1) http://benchmarksgam[...] 2014-02-02
[49] 웹사이트 JRuby compared to Ruby 1.9, Computer Language Benchmarks Game (2) http://benchmarksgam[...] 2014-02-02
[50] 웹사이트 JRuby 9.4.1.0 Released https://www.jruby.or[...] 2023-02-10
[51] 웹사이트 Sun Welcomes JRuby Developers http://blogs.sun.com[...] On the Record 2006-09-07
[52] 웹사이트 ThoughtWorks https://ola-bini.blo[...] On the Record 2008-09-16
[53] 웹사이트 JRuby guys jumped from fear of the unknown http://www.itworld.c[...] 2009-08-03
[54] 문서 Ruby & JRuby Support Available in NetBeans IDE http://www.netbeans.[...]
[55] 문서 Ruby brightens the NetBeans platform http://www.infoworld[...]
[56] 웹사이트 JRuby performance benchmark http://shootout.alio[...] shootout.alioth.debian.org 2007-11-05
[57] 웹사이트 The Great Ruby Shootout http://antoniocangia[...] 2008-02-01
[58] 웹사이트 JRuby 1.1.1 in RedHat Fedora https://headius.blog[...] 2008-04-26
[59] 웹사이트 jruby https://admin.fedora[...] fedoraproject.org 2008-04-26
[60] 웹사이트 JRuby 1.1.3 Released http://docs.codehaus[...] jruby.codehaus.org 2008-07-19
[61] 간행물 Ruby 2.2互換の「JRuby 9.0.0.0」リリース http://osdn.jp/magaz[...] OSDN Magazine 2015-07-24
[62] 웹사이트 Rails Support http://wiki.jruby.or[...] JRuby Team 2008-02-17
[63] 웹사이트 Zero to Production in 15 Minutes http://blog.headius.[...] 2008-08-27
[64] 문서 "2807のRails固有テストケースのうち 98.6% にパスした。詳しくは [http://docs.codehaus.org/display/JRUBY/2007/03/05/JRuby+0.9.8+Released JRuby 0.9.8 Released] 参照"
[65] 웹사이트 Success Stories http://wiki.jruby.or[...] JRuby Wiki 2008-02-17
[66] 웹사이트 東京大学とサン・マイクロシステムズ、産学連携モデルによる共同研究テーマを決定、研究活動を開始 http://jp.sun.com/co[...] サン・マイクロシステムズ 2008-09-16
[67] 문서 see JSR 292 http://www.jcp.org/e[...]
[68] 웹사이트 Sub-Projects and Investigations http://openjdk.java.[...] Sun Microsystems 2008-02-06
[69] 웹사이트 Happy International Invokedynamic Day! http://blogs.sun.com[...] 2008-09-03
[70] 웹사이트 Dynamic Invocation Runs on OpenJDK http://www.infoq.com[...] infoq.com 2008-09-03
[71] 웹사이트 A First Taste of InvokeDynamic http://blog.headius.[...] 2008-09-13
[72] 웹사이트 The Compiler Is Complete https://headius.blog[...] 2007-10-12
[73] 웹사이트 Script your Java applications and efficiently reuse your Java libraries with this dynamic language http://www.javaworld[...] javaworld.com 2008-04-26
[74] 문서 JSR 223: Scripting for the Java Platform Specification Request http://jcp.org/about[...]
[75] 웹사이트 Paving the Road to JRuby 1.0: Performance https://headius.blog[...] 2007-11-05
[76] 문서 一部のテストケースを除くと、Ruby 1.8 に比べて 50% 程度の遅さである(一部とは全部で39のうち、thread_create_join, sieve, count_words, mandelbrot, and answer の5つ)
[77] 웹사이트 Performance Update https://headius.blog[...] 2007-10-12
[78] 웹사이트 Performance Update https://headius.blog[...] 2007-10-12
[79] 웹사이트 JRuby RC2 Released; What's Next? https://headius.blog[...] 2008-02-17
[80] 웹사이트 JRuby on Rails: Fast Enough http://blog.nicksieg[...] 2007-10-28
[81] 뉴스 JRuby 50倍速、MacRubyはすでに到達域 - 竹内関数 https://news.mynavi.[...]
[82] 웹인용 Releases · jruby/jruby https://github.com/j[...] 2023-02-18



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com