39

我正在尝试使用jmapjhat来追踪 Java 进程中的内存泄漏。每次我这样做时,我都会看到特定对象类型的那些奇怪的符号,例如[S字符串数组和[C字符数组。我不记得是什么意思,而且很难用谷歌搜索这些东西。

编辑:为了证明我的观点,事实证明这[S是一个短[C数组并且是一个字符数组。)

有人愿意制作一张表格,列出所有不同的类名及其含义吗?或者把我指向这样的桌子?

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

4

4 回答 4

68

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

如果此类对象表示非数组类型的引用类型,则返回该类的二进制名称,如Java™ Language Specification, Second Edition所指定。

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

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

元素类型编码
布尔 Z
字节 B
字符 C
类或接口 L类名;
双D
浮动 F
诠释我
长J
短裤
于 2009-07-06T14:15:12.677 回答
15

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

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

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

于 2009-07-06T14:10:48.283 回答
6

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

[Ljava.lang.Object;将是Object[]. 请注意,多维数组显示时带有多个左大括号。

于 2009-07-06T14:14:05.330 回答
-3

表示对象[]

于 2009-07-06T14:12:13.867 回答