java堆转储中的那些奇怪的类名是什么意思?

时间:2009-07-06 14:08:45

标签: java debugging memory-leaks heap jmap

我正在尝试使用jmapjhat跟踪java进程中的内存泄漏。每次我这样做时,我都会看到特定对象类型的奇怪符号,例如字符串数组为[S,字符数组为[C。我永远不会记得什么意味着什么,并且很难谷歌这个东西。

编辑:为证明我的观点,事实证明[S是短数组,[C是char数组。)

任何人都想制作一张表,列出所有不同的班级名称及其含义?或者指点我这样的桌子?

具体来说,我想知道[Ljava.lang.Object;的含义。

4 个答案:

答案 0 :(得分:62)

您会在Class.getName()下找到完整列表:

  

如果这个类对象代表一个   不是数组的引用类型   然后键入类的二进制名称   返回,由 Java™指定   语言规范,第二   版

     

如果这个类对象代表一个   原始类型或void,然后是名称   返回的是String等于Java   语言关键字对应的   原始类型或无效。

     

如果这个类对象代表一个   数组的类,然后是内部的   名称的形式由名称组成   元素类型前面有一个或   更多'['字符代表   数组嵌套的深度。该   元素类型名称的编码为   如下:

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

答案 1 :(得分:14)

它是由JVM Specifications指定的对象数组,用于类名的内部表示:

  • 单个[表示数组
  • L后跟一个完全限定的类名(例如java / lang / Object)是以分号结尾的类名;

所以 [Ljava.lang.object; 表示对象[]

答案 2 :(得分:5)

规则列于Class.getName()的API文档中。

[Ljava.lang.Object;将是Object[]的一个实例。请注意多维数组 显示多个开口括号。

答案 3 :(得分:-1)

表示对象[]