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

its*_*dok 36 java debugging heap memory-leaks jmap

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

(编辑:为了证明我的观点,事实证明这[S是一个简短[C的数组并且是char数组.)

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

具体来说,我想知道是什么[Ljava.lang.Object;意思.

kdg*_*ory 63

您将找到Class.getName()下记录的完整列表:

如果此类对象表示不是数组类型的引用类型,则返回类的二进制名称,如Java™语言规范第二版所指定.

如果此类对象表示基本类型或void,则返回的名称String等于与基本类型或void对应的Java语言关键字.

如果此类对象表示一个数组类,则名称的内部形式由元素类型的名称组成,前面有一个或多个'['字符,表示数组嵌套的深度.元素类型名称的编码如下:

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


dfa*_*dfa 14

它是JVM规范为类名的内部表示指定的对象数组:

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

所以[Ljava.lang.object; 意味着对象[]


Mic*_*rdt 5

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

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