Adam Retter

adam@evolvedbinary.com
 

RocksDB Meetup
@ Meta, Bellevue
2026-09-30


@adamretter

RocksJava
Past, Present, and Future

Evolved Binary and RocksDB

  • Evolved Binary

    • UK - Software, Consultancy, Training, and R&D

    • Contributors to RocksJava for > 10 Years

  • RocksJava (Java, C++, and JNI / FFM)

    • Ensure Feature Parity with C++ API

    • Performance Improvements

    • Docker Images - Build Environments - AlmaLinux 8 / Alpine 3.20

    • Build and Release RockJava binaries (146 releases since 2016)

  • Helped Porting RocksDB

    • Windows / macOS / z/OS / PPC / Arm64 / RISC-V

  • GitHub issues, and general bug-fixing

Releasing
RocksJava

RocksJava Releases (1/2)

  • Intentionally Conservative!

    • Java 8 (2014)

  • Targets 15 platforms:

    • Linux

      • i386 / amd64 / ppc64le / aarch64 / s390x / RISC-V

      • GNU libc 2.28 (2018)

      • musl Libc 1.2.5 (2024)

    • Windows (Windows 10+ / Windows Server 2016+)

      • amd64

      • vcruntime140.dll and UCRT

    • macOS (Mojave 10.14 +)

      • amd64

      • aarch64

RocksJava Releases (2/2)

  • Upcoming targets:

    • Windows aarch64

    • AIX PPC64

    • z/OS

    • FreeBSD amd64

    • OpenBSD amd64

  • Cloud Hardware Donations (Thank You!):

    • Evolved Binary - RISC-V, macOS, Windows, Linux amd64/i386, FreeBSD, OpenBSD

    • Oregon State University - Open Source Labs - ppc64le Linux, ppc64 AIX

    • Huawei - aarch64 Linux

    • Marist University - s390x Linux

    • IBM - z/OS

    • RISC-V - 10xEngineers

Current RocksJava
Release Process
Overview

( < v10.5.1 )
 

 

Current

RocksJava

Release

Process

( < 10.5.1 )

Problems with Current Release Process

  • Driven from macOS

  • RocksJava upgrade to C++ 20 was challenging

    • We want to target older GNU/MUSL libc, or Windows, or macOS

    • Need C++ 20 compiler that supports older platform

    • Thank you SCL for CentOS!

  • Maven Central changed its publication process

    • Now hard to publish without Apache Maven

New Release Process

  • Can be run on any OS

    • Native Binaries are still built on specific hardware platforms

  • Modernised tool chain

    • AlmaLinux8 / Apline 3.20

    • gcc13

  • Only the C++ code is built wth Make or CMake

  • Java code is now built with Maven

    • Greatly reduced the build config

    • Easy to publish to Maven Central - central-publishing-maven-plugin

New RocksJava
Release Process
Overview
( >= 10.5.1 )

New
RocksJava
Release
Process
( >= 10.5.1 )

Modernising
RocksJava

Java - Foreign Function and Memory API

  • RocksJava is currently built using JNI (Java Native Interface)

  • Java FFM (Foreign Function and Memory API)

    • Modern replacement for JNI

    • Previewed in Java 18 (Mar. 2022)

    • Stabilised in Java 22 (Mar. 2024)

    • Performance improved in Java 24 (Mar. 2025)

  • Advantages

    • Less/No binding code (delete JNI C++ code)

    • Performance?

  • Disadvantages

    • Need to improve RocksDB C API (Advantage?)

    • Requires dependent projects to upgrade their Java (>= RocksJava)

JNI vs FFM Benchmarks (Get - Small Values)

Intel
Xeon
Linux

JNI vs FFM Benchmarks (Get - Large Values)

Intel
Xeon
Linux

JNI vs FFM Benchmarks (Get - Small Values)

Apple
M3

JNI vs FFM Benchmarks (Get - Large Values)

Apple
M3

JNI vs FFM Benchmarks

How to move from JNI to FFM?

  • RocksDB is widely used as infrastructure:

    • e.g. Many Apache projects use RocksJava

    • Java Binaries are Forwards Compatible - Not Backwards Compatible

    • RocksJava's use of Java 8 (and older glibc, etc.) ensures wide compatibility

  • Parallel Approach - Maintain Java compatibility in medium-term

    • Improve the RocksDB C API (Feature Partity, etc.)

    • Develop FFM (Java 25+) in Parallel to JNI (Java 8+)

    • Deprecate JNI

    • Grow FFM Adoption

    • Remove JNI (eventually)

Thanks

(Questions in the Break please)