Почему я не вижу корни GC?

У меня есть приложение, которое разбилось с OutOfMemory. Я загрузил файл phd из краха в Eclipse Memory Analyzer. Я быстро определил довольно подозрительный ArrayList с примерно 5 700 000 записей, каждая из которых представляет собой строку с содержимым 16 нулевых байтов (????). Примечание. Я не проверял все записи, а просмотрел несколько меньшую выборку.

Неудивительно, что мне интересно, кто держится за такую ​​глупость, поэтому я щелкнул правой кнопкой мыши по ArrayList и открыл «Путь к корням GC» (со всеми ссылками или с некоторым исключением, похоже, это не имеет значения) .

Открывается новая вкладка и отображается только одна строка, ArrayList, с добавленным суффиксом «Неизвестно».

Итак, мой вопрос в заголовке: почему я не вижу корни GC?

Различные версии задействованных материалов.

Приложение работает на Websphere 8.x на какой-то 1.6 IBM JRE.

Анализатор памяти Eclipse: версия 1.5.0

Diagnostic Tool Framework для Java (для загрузки дампов IBM): 1.10.0.201211161052


person Jens Schauder    schedule 13.07.2015    source источник
comment
Выстрел в темноте: любой другой анализатор памяти (JConsole. VisualVM?) ведет себя аналогично?   -  person Rekin    schedule 13.07.2015
comment
@Rekin Я не нашел ничего, что могло бы читать файлы IBM phd.   -  person Jens Schauder    schedule 13.07.2015
comment
Ах, так расширение не было опечаткой. Извиняюсь   -  person Rekin    schedule 13.07.2015
comment
@Рекин, к сожалению, нет   -  person Jens Schauder    schedule 13.07.2015


Ответы (1)


Похоже, дамп кучи просто неполный. Моя личная теория заключается в том, что из-за нехватки памяти запись кучи работает не совсем надежно.

Я создал новый heapdump из приложения, пока оно работало нормально. Конечно, был еще один экземпляр странного ArrayList, который содержал строки, состоящие из NULL-байтов. Однако в нем было всего 10 записей, и он занимал лишь очень маленькую часть кучи.

У этого ArrayList было два пути к GC-Root «Системный класс»: один через com.ibm.ws.security.core.WSAccessManager и один через com.ibm.ws.security.util.MultiDomainHelper. Для первого я обнаружил ошибку, которая может быть связана с: http://www-01.ibm.com/support/docview.wss?uid=swg1PI33412

person Jens Schauder    schedule 14.07.2015