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

18,704

Solution 1

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 

Solution 2

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

Solution 3

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.

Share:
18,704
itsadok
Author by

itsadok

Updated on June 15, 2022

Comments

  • itsadok
    itsadok about 2 years

    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.

  • Brett
    Brett almost 15 years
    Section 4.3.2 is probably a better reference.
  • dfa
    dfa almost 15 years
    furthermore the internal naming is same of Class.getName(), just replace / with .
  • Neil
    Neil about 12 years
    I saw this: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljav‌​a/lang/String;ILjava‌​/lang/String;[Lj ava/lang/Object;Ljava/lang/Throwable;)V -- What does "IL" mean? The methods that closely match that signature are log(Marker, String, int, String, Object[], Throwable), do primitives not get separated by semi-colon?