Co oznaczają te dziwne nazwy klas w Java heap dump?

Próbuję namierzyć wyciek pamięci w procesie java, używając jmapi jhat. Za każdym razem, gdy to robię, widzę te dziwne zapisy dla konkretnych typów obiektów, jak {[0] } dla tablic łańcuchowych i [C dla tablic znakowych. Nigdy nie pamiętam, co znaczy co, i bardzo trudno to wygooglować.

(EDIT : aby udowodnić moją rację, okazuje się, że [S jest tablicą krótkich i [C jest tablicą znaków.)

Ktoś chce zrobić tabelkę z listą wszystkich różne nazwy klas i co one oznaczają? Albo wskaż mi taki stół?

W szczególności chciałbym wiedzieć, co oznacza [Ljava.lang.Object;.

Author: itsadok, 2009-07-06

4 answers

Pełną listę znajdziesz pod klasą .getName():

Jeśli obiekt tej klasy reprezentuje Typ odniesienia, który nie jest tablicą wpisz wtedy binarną nazwę klasy zwracana jest zgodnie z instrukcją Java™ Specyfikacja Języka, Drugi Wydanie .

Jeśli obiekt tej klasy reprezentuje Typ prymitywny lub pustka, wtedy nazwa zwracane jest String równe Java słowo kluczowe języka odpowiadające Typ prymitywny lub pustka.

Jeśli obiekt tej klasy reprezentuje klasy tablic, następnie wewnętrzne forma nazwy składa się z imienia typu elementu poprzedzonego jednym lub więcej " ["znaki reprezentujące głębokość zagnieżdżenia tablicy. Na kodowanie nazw typów elementów jest jak follows:

Element Type        Encoding
boolean             Z
byte                B
char                C
class or interface  Lclassname;
double              D
float               F
int                 I
long                J
short               S 
 61
Author: kdgregory,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-27 09:10:34

Jest to tablica obiektów określona przez JVM Specifications do wewnętrznej reprezentacji nazw klas:

  • a single [means an array of
  • Java/Lang/Object) jest nazwą klasy zakończoną średnikiem ;

Więc [Ljava.lang.obiekt; oznacza obiekt[]

 14
Author: dfa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-06 14:10:48

Reguły są wymienione w dokumencie API klasy .getName () .

[Ljava.lang.Object; będzie instancją Object[]. Zauważ, że tablice wielowymiarowe są wyświetlane z wieloma otwartymi szelkami.

 5
Author: Michael Borgwardt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-06 14:14:05

Oznacza Obiekt []

 -1
Author: omerkudat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-06 14:12:13