У меня есть большая программа в Java, который использует многопоточность. В некоторых случаях программа начинает использовать 100% из трех ядер моих восьми базовых систем. В нормальной эксплуатации, использовании программы все ядра в 1-2%. Как я могу найти класс, это перегружает ядра?
Если вы используете Java поверх UNIX или некоторых версий Linux, поищите DTrace с Java.
Используйте профилировщик, например jvisualvm, который поставляется в комплекте с jdk-1.6.0_10
Лучшим решением будет использование профилировщика - именно для этого они и созданы, и в комплекте с Java 6 есть отличный профилировщик.
Другое (далеко не идеальное решение) - запустить вашу программу в Eclipse IDE (если вы используете именно ее) в режиме отладки. Затем вы можете посмотреть на запущенные потоки. Если многие из них приостановлены, то виновником может быть тот, который не приостановлен. Заставьте его прерваться (из панели инструментов), и вы сможете увидеть, где он находится. Есть много шансов, что вы найдете чистый цикл или занятое ожидание.
Используйте профилировщик, чтобы выяснить, какой поток(и) использует все циклы процессора, и какой метод(ы) они выполняют.
Если вы используете Eclipse, вы можете использовать инструмент профилирования TPTP.
Если вы идете по пути коммерческих профилировщиков, то я бы рекомендовал использовать Dynatrace.
Попробуйте взять дамп потоков (см. команды jps, jstack), а затем посмотрите, какие методы выполняются.