У меня проблема в моей кодовой базе, где мы неправильно закрываем дескрипторы файлов или, возможно, потоки. В конечном итоге мы получаем исключение TooManyOpenFiles при очень большой нагрузке. Основываясь на выводах lsof, мы уверены, что знаем, где происходит утечка (в нашей системе ведения журнала), но мой вопрос: как я могу написать единичный тест, который проверяет, когда он завершен, что ресурсы были закрыты должным образом? Есть ли способ запросить JRE, чтобы узнать, сколько файлов в настоящее время открыто? Могу ли я каким-то образом перехватить файловые операции, чтобы я мог их контролировать?Что такое хороший шаблон для теста модуляции Java, который гарантирует, что вы правильно закрываете файлы?
Я подозреваю, что мне понадобится инструмент для моего кода, чтобы управлять всеми файлами ввода/вывода, подсчитывать ссылки и следить за тем, чтобы они закрывались таким образом, но если кто-нибудь знает о нисходящем решении, идеи, о которых я упоминал выше, это будет огромной помощью!
Я считаю, что Java делает все это в фоновом режиме, поэтому его следует позаботиться. Хм, может быть, я пропустил его, хотя – Coffee
Java в конечном итоге собирает мусор и закрывает ваши открытые файлы, но если вы откроете и выбросите ресурсы очень быстро, он не сможет идти в ногу со временем. Закрытие ручек явно намного лучше. –