Java 的 UDP 库,无垃圾

UDP library for Java that works garbage free

我正在为 Java 寻找一个无垃圾的 UDP 库。 原因是我正在为实时系统开发守护进程应用程序。 我的要求是每个请求延迟 5 微秒(从到达我的套接字直到响应到达目的地)。

有几个支持 UDP 且不产生垃圾的消息服务 (Tibco FTL & Aeron),但两者都要求所有通信组件都使用该平台。

我的情况是我无法控制其他组件,我所知道的是我要将 UDP 消息发送到我的套接字,我需要处理它们而不产生任何垃圾。

将不胜感激任何想法:)

没有垃圾是什么意思?在 UDP 中,您可能会丢失消息,这是该协议固有的。如果你想在 UDP 之上有一些可靠性,你需要有一个额外的层来管理 acks、重传等。这意味着你的生产者和消费者应用程序必须使用这一层 API 来发送/接收消息.

一个非常简短的例子就是:

import java.lang.System;

public class UdpNoGc {
    public static void main(String[] args) throws Exception {
        var buf = new byte[1024];
        var pkt = new java.net.DatagramPacket(buf, buf.length);

        try (var sock = new java.net.DatagramSocket(4321)) {
            for (;;) {
                sock.receive(pkt);

                System.out.write(buf, 0, pkt.getLength());

                System.gc();
            }
        }
    }
}

显式 System.gc() 调用就在那里,因此您可以 运行 使用:

java "-Xlog:gc,heap*" UdpNoGc

并看到它在启动后没有分配任何东西。请注意,在 Java 中编写不分配的代码有些困难,使用另一种为此提供更多支持的语言可能会更容易。