Это сообщение не имеет большого значения , если , вы всегда останавливаете Tomcat, когда вы удаляете / повторно развертываете свое приложение, в противном случае эти операции вызывают утечку памяти, которая является большой проблемой, особенно на производстве.
Потоки с именем "Timer- #" создаются java.util.Timer (и, возможно, другими классами) в соответствии с предложением Bob Kuhar , но поиска собственной кодовой базы может быть недостаточно, иобеспечение того, что вы используете потоки демона, не устраняет это сообщение (комментарий Тома Хоутина верен).
Когда я получил это сообщение, оно было создано транзитивной зависимостью моего кода, точно классом GenericObjectPool
Apache Commons Pool v1.3, использующий поток daemon (см. исходный код ).Чтобы найти класс, который создает экземпляр Timer, мне нужно было установить точку прерывания в конструкторе каждого класса Timer, а затем я исследовал стек вызовов.Чтобы решить эту проблему, мне пришлось обновить библиотеку (более новые версии Commons Pool не используют этот таймер).
Когда вы контролируете код, который создает поток, вы можете решить эту проблему, гарантируя, что выостановить поток, когда приложение останавливается.Использование потоков демонов является хорошей практикой, но этого недостаточно, поскольку потоки демонов умирают автоматически только при завершении работы Tomcat, но не при удалении приложения.
В более общем случае, когда вы не знаете, кто создалпротивный поток, отметьте Поиск источника создания потока в приложении Java и Определите, кто создал поток (w. Eclipse) .
ОБНОВЛЕНИЕ
Совершенно другой подход заключается в использовании очень интересного Прослушивающего устройства для предотвращения утечек .Также прочитайте другие посты об утечках из загрузчика классов этим автором.