Why can't I see GC roots?

I have an application that crashed with OutOfMemory. I have loaded the phd file from crash into Eclipse Memory Analyzer. I quickly identified a rather suspicious ArrayList with roughly 5,700,000 entries, each of which is a string with 16 null bytes (????) content. Note. I didn't check all the entries, but I did check a slightly smaller sample.

Unsurprisingly, I'm wondering who is holding on to such nonsense, so I right clicked on the ArrayList and opened the "Path to GC Roots" (with all references or with some exception, it doesn't seem to make a difference).

A new tab opens and only one line is displayed, ArrayList, suffixed with "Unknown".

So my question is in the title: Why can't I see GC roots?

Various use cases.

Application runs on Websphere 8.x on 1.6 IBM JRE

Eclipse Memory Analyzer: version 1.5.0

Diagnostic Tool Environment for Java (for downloading IBM dumps): 1.10.0.201211161052

+3


source to share


1 answer


It looks like the heap heap is just incomplete. My personal theory is that due to lack of memory, heap writing does not work completely reliably.

I created a new chunk from the app while it worked fine. Of course, there was another instance of the weird ArrayList that contained strings of NULL bytes. It only had 10 records and only took up a very small portion of the heap.



The ArrayList had two paths to the GC-Root "System Class" one through com.ibm.ws.security.core.WSAccessManager and one through com.ibm.ws.security.util.MultiDomainHelper. For the first one, I found an error that may be related: http://www-01.ibm.com/support/docview.wss?uid=swg1PI33412

+1


source







All Articles