What do those strange class names in a java heap dump mean?

debugging, heap-memory, java, jmap, memory-leaks

Solution

You'll find the complete list documented under Class.getName():

If this class object represents a reference type that is not an array type then the binary name of the class is returned, as specified by the Java™ Language Specification, Second Edition.

If this class object represents a primitive type or void, then the name returned is a `String` equal to the Java language keyword corresponding to the primitive type or void.

If this class object represents a class of arrays, then the internal form of the name consists of the name of the element type preceded by one or more '[' characters representing the depth of the array nesting. The encoding of element type names is as follows:

Element Type        Encoding
boolean             Z
byte                B
char                C
class or interface  Lclassname;
double              D
float               F
int                 I
long                J
short               S 

Problem

I'm trying to track down a memory leak in a java process, using jmap and jhat. Every time I do this I see those weird notation for specific object types, like `[S` for string arrays and `[C` for Character arrays. I never remember what means what, and it's very hard to google this stuff. (EDIT: to prove my point, it turns out that `[S` is array of short and `[C` is array of char.) Anyone care to make a table listing all the different class names and what they mean? Or point me to such table? Specifically I'd like to know what `[Ljava.lang.Object;` means.

Original source