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.
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
it is an array of objects as specified by JVM Specifications for internal representation of class names:
- a single [ means an array of
- L followed by a fully qualified class name (e.g. java/lang/Object) is the class name terminated by semicolon ;
so [Ljava.lang.object; means Object[]
The rules are listed in the API doc of Class.getName().
[Ljava.lang.Object;
would be an instance of Object[]
. Note that multidimensional arrays
are displayed with multiple opening braces.