我正在尝试使用jmap和jhat跟踪java进程中的内存泄漏。每次我这样做时,我都会看到特定对象类型的奇怪符号,例如字符串数组为[S
,字符数组为[C
。我永远不会记得什么意味着什么,并且很难谷歌这个东西。
(编辑:为证明我的观点,事实证明[S
是短数组,[C
是char数组。)
任何人都想制作一张表,列出所有不同的班级名称及其含义?或者指点我这样的桌子?
具体来说,我想知道[Ljava.lang.Object;
的含义。
答案 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指定的对象数组,用于类名的内部表示:
所以 [Ljava.lang.object; 表示对象[]
答案 2 :(得分:5)
规则列于Class.getName()的API文档中。
[Ljava.lang.Object;
将是Object[]
的一个实例。请注意多维数组
显示多个开口括号。
答案 3 :(得分:-1)
表示对象[]