当前位置: 首页 > 面试题库 >

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

潘宪
2023-03-14
问题内容

我正在尝试使用jmap和jhat跟踪Java进程中的内存泄漏。每次执行此操作时,都会看到针对特定对象类型的那些怪异的表示法,例如[S字符串数组和[CCharacter数组。我永远都不记得这意味着什么,而且很难用谷歌搜索这些东西。

编辑 :证明我的观点,原来[S是short [C数组,是char数组。)

有人愿意制作一张列出所有不同类名及其含义的表吗?还是将我指向这样的桌子?

我特别想知道什么[Ljava.lang.Object;意思。


问题答案:

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

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

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

如果此类对象表示一类数组,则名称的内部形式由元素类型的名称组成,其后是一个或多个代表数组嵌套深度的’[‘字符。元素类型名称的编码如下:

Element type code

Boolean Z

Byte B

C character

Class or interface L_ Class name_ ;

Double D

Floating f

I

Long J

Short s


 类似资料:
  • 问题内容: 我已经看到了声明,接口和类 这是什么意思? 问题答案: 没有证据,我相信您在谈论Java的泛型支持… 泛型允许您抽象类型 在Java 5之前,很难提供能够支持多种不同类型的Objects的类而不必为每种特定情况编写代码,因此人们通常会这样做。 这导致在运行时做出许多困难的选择,您必须进行运行时检查以查看是否有可能将给定的Object强制转换为可用类型…例如 现在,这已经很明显了,但是如

  • 问题内容: 我用Javassist创建了一个没有实际方法的构造函数 当我试图拿出这堂课的签名时 我懂了 我很困惑“ V”是什么意思?我期望任何一个公共Echo(); 或类似的东西 问题答案: JVM使用一种紧凑的方式来存储方法签名,其中的构造函数被认为是特例。 例如: 表示不带参数的方法 表示它什么也不返回 该计划的其他部分是: -字节 -字符 -双 -浮动 -整数 - 长 -短 -无效 -布尔值

  • jmap帮助显示: ... ... 一旦我转储一个Tomcat(带有java参数-Xmx384m)堆: 我有一个300M的转储文件。 当我只使用活动对象转储其堆时: 我有一个120M的转储文件。 我对活物体的猜测可能是: > 年轻一代中的对象; 使用/引用/可访问且不会被收集的对象。 哪一个是对的? 使现代化 我的猜测#2似乎是正确的,感谢Alexey Ragozin的解释(选项将导致完整GC)。

  • 问题内容: 我想知道什么是Java线程转储。有人可以帮我了解什么是线程转储以及它与正在运行的Java程序的关系吗? 问题答案: Java线程转储是一种找出JVM中每个线程在特定时间点正在做什么的方法。如果您的Java应用程序有时在负载下运行时挂起,这将特别有用,因为对转储的分析将显示线程卡在哪里。 您可以通过运行并通过单击生成线程转储。 要了解如何从JVM进行线程转储,请参见此处 要了解如何创建线

  • 问题内容: 我发现此代码可在此处找到SO中的重复项。但我不明白这条线是什么意思 问题答案: 该运算符是Java中无符号的右移位运算符。它有效地将操作数除以右操作数的幂,或者仅在此处。 和之间的差异仅在移动负数时才会显示。如果运算符是a ,则运算符会将其移位到最高有效位,而无论如何都将移位。 更新: 让我们求平均值和()。我们可以轻松地进行数学运算: 现在,通过代码,涉及到以下这些位: 让我们将“转

  • 问题内容: 我的问题如上所述。抱歉,可能是重复的,但最后找不到一个示例。 为什么不只使用它作为参数? 问题答案: 是可参数化的类,因此可以使用where 类型的语法。通过编写,您可以声明一个可以是任何类型的对象(是通配符)。该类型是包含类元信息的类型。 通过指定特定类型来引用泛型类型始终是一种好习惯,这是通过尊重您的习惯(您知道可参数化的)来使用的,但并不限制参数具有特定类型。 有关泛型和通配符的