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 中编写不分配的代码有些困难,使用另一种为此提供更多支持的语言可能会更容易。
我正在为 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 中编写不分配的代码有些困难,使用另一种为此提供更多支持的语言可能会更容易。