java堆转储中那些奇怪的类名意味着什么?
我正在尝试使用和跟踪java进程中的内存泄漏。每次我这样做的时候,我都会看到一些特定对象类型的奇怪符号,比如字符串数组的java堆转储中那些奇怪的类名意味着什么?,java,debugging,memory-leaks,heap,jmap,Java,Debugging,Memory Leaks,Heap,Jmap,我正在尝试使用和跟踪java进程中的内存泄漏。每次我这样做的时候,我都会看到一些特定对象类型的奇怪符号,比如字符串数组的[S和字符数组的[C。我永远不记得什么是什么意思,而且很难用谷歌搜索这些东西 (EDIT:为了证明我的观点,[S是短数组,[C是字符数组。) 有人愿意做一个表,列出所有不同的类名及其含义吗?或者给我指一下这样的表 具体来说,我想知道[Ljava.lang.Object;的意思。它是一个对象数组,由指定用于类名称的内部表示: 单个[表示一个数组 L后跟完全限定的类名(例如jav
[S
和字符数组的[C
。我永远不记得什么是什么意思,而且很难用谷歌搜索这些东西
(EDIT:为了证明我的观点,[S
是短数组,[C
是字符数组。)
有人愿意做一个表,列出所有不同的类名及其含义吗?或者给我指一下这样的表
具体来说,我想知道
[Ljava.lang.Object;
的意思。它是一个对象数组,由指定用于类名称的内部表示:
- 单个[表示一个数组
- L后跟完全限定的类名(例如java/lang/Object)是类名,以分号结尾
因此[Ljava.lang.object;表示对象[]表示对象[]规则列在的API文档中
[Ljava.lang.Object;
将是对象[]
的一个实例
使用多个大括号显示。您可以在下面找到完整的列表: 如果该类对象表示 不是数组的引用类型 然后键入类的二进制名称 返回,由Java语言指定™ 第二语言规范 版本 如果该类对象表示 基元类型或void,然后是名称 返回的是一个
字符串
等于Java
对应于
原语类型或void
如果该类对象表示
类的数组,然后是内部
名称的形式由名称组成
前面有一个或多个元素的元素类型
更多的“[”字符表示
数组嵌套的深度
元素类型名称的编码如下所示
如下:
Element Type Encoding
boolean Z
byte B
char C
class or interface Lclassname;
double D
float F
int I
long J
short S
元素类型编码
布尔Z
字节B
字符C
类或接口Lclassname;
双D
浮动F
int I
长J
短S
字符串数组应该是[Ljava/lang/string;。为我辩护,谷歌搜索让我在java.sun.com上找到了一篇文章,其中包含这样一行:“字符串和字符数组对象,[S和[C,在这个列表中总是排在首位。”。有点误导。该网站也有一些好信息:此链接已断开。我不想发布链接,但我会发布更新后的链接,以供之前的评论-。第4.3.2节可能是更好的参考。该链接实际上没有描述Class.getName()使用的约定--事实上,内部命名表示法是完全不同的,而且内部命名与Class.getName()相同,只需替换/即可。我看到:
org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Lj ava/lang/Object;Ljava/lang/Throwable;)V
--什么是“IL”意思?与该签名紧密匹配的方法是log(Marker,String,int,String,Object[],Throwable)
,原语不使用分号分隔吗?