views:

491

answers:

4

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.

+10  A: 

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[]

dfa
Section 4.3.2 is probably a better reference.
Tom Hawtin - tackline
that link doesn't actually describe the conventions used by Class.getName() -- in fact, the internal naming representation is quite different
kdgregory
Class.getName() is never cited by itsadok...
dfa
furthermore the internal naming is same of Class.getName(), just replace / with .
dfa
I voted you up, but kdgregory's answer just looks nicer :)
itsadok
A: 

Means Object[]

omerkudat
+3  A: 

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.

Michael Borgwardt
+5  A: 

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
kdgregory