У меня есть ситуация на работе, когда мы запускаем сервер Java EE с несколькими приложениями, развернутыми на нем. В последнее время у нас были частые исключения OutOfMemoryException. Мы подозреваем, что некоторые приложения могут плохо работать, могут быть утечки или что-то в этом роде.
Проблема в том, что мы не можем сказать, какой именно. Мы запустили некоторые профилировщики памяти (например, YourKit), и они довольно хорошо говорят, какие классы используют больше всего памяти. Но они не показывают отношения между классами, поэтому у нас возникает такая ситуация: мы видим, что, скажем, существует множество строк и массивов int и записей HashMap, но мы не можем сказать, какое приложение или пакет они родом из.
Есть ли способ узнать, откуда берутся эти объекты, поэтому мы можем попытаться определить пакеты (или приложения), которые выделяют больше всего памяти?