Я хочу отслеживать утечки памяти в ThreadLocals. Чтобы получить все локальные объекты потока, я использую код отсюда http://blog.igorminar.com/2009/03/identifying-threadlocal-memory-leaks-in.html. Этот код использует отражение, чтобы извлечь все локаторы потоков в текущий поток.Состояние нити в пуле потоков
Я хочу фоновый поток, который контролирует все потоки.
Простое управление всеми потоками (рекурсивные вызовы ThreadGroup). Но мне нужно знать, какие потоки в настоящее время не выполняются и все еще используют локальные объекты потока.
Например: В Thread A используется LocalThread A1. После завершения потока и возврата в пул потоков контейнера A1 должен быть выпущен. Thread M - моя контрольная нить. Он работает по всем потокам и находит поток A. Поэтому ему нужно знать, не работает ли A в настоящее время из-за контекстного переключателя (и в этом случае A1 не является утечкой), или A в настоящее время не выполняется, потому что он был возвращен в пул.
Как я могу различать случаи?
BTW, мой класс мониторинга должен поддерживать любую платформу (серверы приложений, веб-серверы, стандартную Java, любой поставщик, версию Java версии 1.5 и выше). Это значит, что мне нужно знать, является ли активным поток, независимо от того, если контейнер использует рамки исполнителей или старый механизм резьбы ....
Мне кажется, что я должен указать, что использование механизма, описанного в связанной статье, в сочетании с какой-то длинной живой мониторинговой нитью, может легко СОЗДАТЬ утечку ссылок, что вызывает проблему, которую вы пытаетесь диагностировать. Будьте осторожны, чтобы регулярно очищать ссылки и слегка проступать. – allingeek