繁体   English   中英

Java 的 UDP 库无垃圾工作

[英]UDP library for Java that works garbage free

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

有几个消息服务支持 UDP 并且不产生垃圾( Tibco FTLAeron ),但都要求所有通信组件都使用平面格式。

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

将不胜感激任何想法:)

没有垃圾是什么意思? 在 UDP 中,您可能会丢失消息,这是该协议固有的。 如果您希望在 UDP 之上具有一定的可靠性,您需要有一个额外的层来管理确认、重传等。这意味着您的生产者和消费者应用程序必须使用这一层 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 中编写不分配的代码有些困难,使用对此提供更多支持的另一种语言可能更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM