为什么不在每个周期性的 sendMessage() 之前初始化 TcpSyslogMessageSender?

Why not initializing a TcpSyslogMessageSender before every periodic sendMessage()?

我在一个简单的应用程序中使用 CloudBees Syslog Java 客户端定期向服务器发送 Syslog 消息。一切正常,但我想知道 - 如果 TcpSyslogMessageSender-Class 在每个循环中初始化,它将在 10 次迭代后停止发送新消息,无一例外。我可以轻松地更改它并将对象初始化移动到调用 class 的构造函数,但我想了解这是为什么。从我的角度来看,我在每次迭代时都初始化了一个干净的新对象。垃圾收集应该删除旧对象并释放使用的网络资源。但也许这并不容易。 :)

while(true){
            TcpSyslogMessageSender messageSender = new TcpSyslogMessageSender();
            messageSender.setDefaultMessageHostname(...);
            ...
            messageSender.sendMessage(msg);
}

想了解一下!

干杯,

cmax

我在回答自己:我了解到 TcpSyslogMessageSender 有一个 close-method 实际上关闭了使用的套接字。似乎无法从一个 Java-instance 并行打开超过 10 个套接字。不幸的是,close-call 不是给定代码示例的一部分。现在,多次初始化和重新初始化TcpSyslogMessageSender 绝对没有问题。希望有人会觉得这有帮助。