JRuby는 루비 버전 업데이트를 추적하는 데 있어 지속적인 도전에 직면해 왔으나, JRuby 10은 루비 3.4와의 호환성을 확보하여 C 루비와의 격차를 성공적으로 줄였습니다. 특히, 레일스(Rails)의 액티브 레코드(Active Record)와 같은 데이터베이스 어댑터 호환성 유지가 가장 많은 노력을 요구하며, 소규모 팀의 한계로 인해 커뮤니티의 적극적인 기여가 필요하다고 역설합니다.
JRuby의 전통적인 약점이었던 시작 시간은 자바 17 이후 도입된 AppCDS(Application Class Data Store) 기능을 활용하여 C 루비에 버금가는 수준으로 단축되었습니다. 향후 Project Leyden의 AOT 캐싱과 Project CRaC(Coordinated Restore at Checkpoint) 또한 시작 시간 개선에 크게 기여할 것으로 기대됩니다. 성능 측면에서 JRuby는 JVM의 수십 년간 축적된 최적화 기술을 바탕으로 순수 루비 코드(예: Red-Black Tree 벤치마크)는 물론, C 확장(예: OJ JSON 파서)에서도 C 루비의 YJIT보다 뛰어난 성능을 보여줍니다. 이는 JVM이 C 코드를 효율적으로 인라인하고 런타임에 최적화하는 능력 덕분입니다.
파이버(Fibers) 구현에 있어서 JRuby는 과거 네이티브 스레드 의존성으로 인한 제약이 있었으나, Project Loom의 가상 스레드 도입으로 훨씬 빠르고 효율적인 파이버 생성이 가능해졌습니다. 또한, 루비의 Class#new
및 Data
객체 생성 시 JVM의 최적화된 객체 할당 덕분에 C 루비 대비 월등히 빠른 성능을 제공하며, GraalVM과 같은 JIT 컴파일러를 통해 불필요한 객체 할당을 제거하는 이점까지 누릴 수 있습니다.
동시성(Concurrency) 측면에서 JRuby는 ractors와 같은 복잡한 모델 대신 일반 스레드를 사용하여 시스템의 모든 코어를 효과적으로 활용할 수 있음을 강조합니다. JSON 파싱 벤치마크를 통해 C 루비의 스레드 및 ractors 대비 JRuby 스레드가 월등한 성능을 보였으며, 레일스 애플리케이션에서도 단일 프로세스에서 더 적은 메모리로 더 많은 요청을 처리할 수 있어 높은 효율성을 자랑합니다.
마지막으로, JRuby는 자바가 실행되는 모든 환경에서 루비 애플리케이션을 배포할 수 있는 기회를 제공하여 루비의 활용 범위를 넓힙니다. 자바 스윙(Java Swing)을 활용한 GUI 애플리케이션, Shoes 4, Glimmer, 마인크래프트(Minecraft) 플러그인, 안드로이드(Android) 애플리케이션(Ruboto) 등 다양한 분야에서 루비를 활용할 수 있음을 보여주며, 이는 루비 개발자들이 기존 지식과 라이브러리를 활용하여 새로운 시장과 엔터프라이즈 환경에 진출할 수 있는 중요한 통로가 됨을 시사합니다.