Подтвердить что ты не робот

Что означают эти странные имена классов в дампе кучи java?

Я пытаюсь отслеживать утечку памяти в java-процессе, используя jmap и jhat. Каждый раз, когда я это делаю, я вижу эти странные обозначения для конкретных типов объектов, например [S для строковых массивов и [C для массивов символов. Я никогда не помню, что означает что, и это очень сложно для этого.

( EDIT: чтобы доказать свою точку зрения, оказывается, что [S является массивом коротких и [C является массивом char.)

Кто-нибудь хочет сделать таблицу, в которой перечислены все разные имена классов и что они означают? Или указать мне на такой стол?

В частности, я хотел бы знать, что означает [Ljava.lang.Object;.

4b9b3361

Ответ 1

Вы найдете полный список, зарегистрированный в Class.getName():

Если этот объект класса представляет собой ссылочный тип, который не является массивом введите двоичное имя класса возвращается, как указано в Java ™ Спецификация языка, вторая Выпуск.

Если этот объект класса представляет собой примитивный тип или пустота, то имя return - это 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 

Ответ 2

это массив объектов, указанный Спецификации JVM для внутреннего представления имен классов:

  • одиночный [означает массив
  • L, за которым следует полное имя класса (например, java/lang/Object), это имя класса, завершаемое точкой с запятой;

поэтому [Ljava.lang.object; означает Объект []

Ответ 3

Правила перечислены в документе API Class.getName().

[Ljava.lang.Object; будет экземпляром Object[]. Обратите внимание, что многомерные массивы отображаются с несколькими открывающимися скобками.

Ответ 4

Значит объект []