#java #collections #syslog #garbage
#java #Коллекции #системный журнал #мусор
Вопрос:
Я использую CloudBees Syslog Java Client в простом приложении для периодической отправки сообщений системного журнала на сервер. Все работает нормально, но я подумал — если TcpSyslogMessageSender-класс инициализируется в каждом цикле, он перестанет отправлять новые сообщения после 10 итераций без каких-либо исключений. Я могу легко изменить это и переместить инициализацию объекта в конструктор вызывающего класса, но я хочу понять, почему это так. С моей точки зрения, я инициализирую чистый новый объект на каждой итерации. Сборка мусора должна удалять старые объекты и освобождать используемые сетевые ресурсы. Но, возможно, это не так просто. 🙂
while(true){
TcpSyslogMessageSender messageSender = new TcpSyslogMessageSender();
messageSender.setDefaultMessageHostname(...);
...
messageSender.sendMessage(msg);
}
Хотелось бы узнать об этом!
Приветствия,
cmax
Ответ №1:
Я отвечаю сам себе: я узнал, что TcpSyslogMessageSender имеет метод закрытия, который фактически закрывает используемый сокет. Похоже, что было невозможно открыть более 10 сокетов из одного Java-экземпляра параллельно. К сожалению, завершающий вызов не был частью данного примера кода. Теперь нет абсолютно никаких проблем инициализировать и повторно инициализировать TcpSyslogMessageSender много раз. Надеюсь, кто-то найдет это полезным.