itsadok
itsadok

Reputation: 29342

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

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.

Upvotes: 44

Views: 21948

Answers (4)

kdgregory
kdgregory

Reputation: 39606

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 

Upvotes: 74

Michael Borgwardt
Michael Borgwardt

Reputation: 346317

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.

Upvotes: 6

omerkudat
omerkudat

Reputation: 10051

Means Object[]

Upvotes: -3

dfa
dfa

Reputation: 116342

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

Upvotes: 18

Related Questions