MYRA : Memory Yielded, Rapid Access — A modern Java Codec & Transport library built entirely on FFM API.
27us
P50 Latency
RPC over-the-wire round-trip
0
GC Pressure
Zero allocations on hot path
2.7M
Decode Ops/s
23% faster than SBE
39%
Faster Than Netty
Transport using Real-world payloads
Experience Native Speed and Memory Safety with predictable, GC-free execution using Java FFM API.
One contract, zero‑copy codegen, delivery over io_uring
messages:
- name: "OrderItem"
fields:
- tag: 1
name: "productCode"
type: "int32"
- tag: 2
name: "qty"
type: "int16"
- name: "OrderCreated"
fields:
- tag: 1
name: "customerId"
type: "string"
- tag: 2
name: "items"
type: "OrderItem"
repeated: true
- tag: 3
name: "tax"
type: "int64"
- tag: 4
name: "totalAmount"
type: "int64"
try (PooledSegment pooled =
OrderCreatedBuilder.allocate(encoder, 512)
.setCustomerId("cust-7", scratch)
.setItems(1, item -> item
.setProductCode(1001)
.setQty((short) 3))
.setTax(120L)
.setTotalAmount(5120L)
.build((short) OrderCreatedFlyweight.TEMPLATE_ID,
OrderCreatedFlyweight.SCHEMA_VERSION)) {
MemorySegment message = pooled.segment();
}
OrderCreatedFlyweight fw = new OrderCreatedFlyweight();
fw.wrap(segment, MessageHeader.HEADER_SIZE);
fw.validate();
Utf8View customer = fw.getCustomerId();
for (int i = 0; i < fw.getItemsCount(); i++) {
OrderItemFlyweight item = fw.getItemsAt(i);
int code = item.getProductCode();
short qty = item.getQty();
}
long total = fw.getTotalAmount();
MyraServer server = new MyraServer(
MyraServerConfig.builder().port(9000).build(),
new MyraServerHandler() {
public void onConnect(TransportBackend conn) {}
public void onDataReceived(TransportBackend conn, RegisteredBuffer buf, int len) {
OrderCreatedFlyweight fw = new OrderCreatedFlyweight();
fw.wrap(buf.segment(), MessageHeader.HEADER_SIZE);
fw.validate();
}
public void onDisconnect(TransportBackend conn) {}
});
server.start();
TransportConfig config = TransportConfig.builder()
.backendType(TransportConfig.BackendType.IO_URING)
.registeredBuffers(TransportConfig.RegisteredBuffersConfig.builder()
.enabled(true).numBuffers(8).bufferSize(2048).build())
.build();
SocketAddress remote = new InetSocketAddress("127.0.0.1", 9000);
Transport client = TransportFactory.create(config, remote);
client.start(new TransportHandlerAdapter() {});
client.connect(remote);
client.send(message);