Que signifient ces noms de classe étranges dans un vidage de tas java?


J'essaie de retrouver une fuite de mémoire dans un processus java, en utilisant jmapet jhat. Chaque fois que je fais cela, je vois ces notations étranges pour des types d'objets spécifiques, comme [S pour les tableaux de chaînes et [C pour les tableaux de caractères. Je ne me souviens jamais de ce qui signifie quoi, et il est très difficile de google ce genre de choses.

(EDIT: pour prouver mon point, il s'avère que [S est la matrice de court et [C est tableau de char.)

Tout le monde se soucie de faire un tableau listant tous les différents noms de classe et ce qu'ils signifient? Ou m'indiquer un tel tableau?

Plus précisément, j'aimerais savoir ce que [Ljava.lang.Object; signifie.

Author: itsadok, 2009-07-06

4 answers

Vous trouverez la liste complète documentée sous la classe .getName():

Si cet objet de classe représente un type de référence qui n'est pas un tableau tapez ensuite le nom binaire de la classe est retourné, comme spécifié par le Java™ Spécification de langue, Deuxième Édition .

Si cet objet de classe représente un type primitif ou vide, puis le nom retourné est un String égal à Java mot-clé de langue correspondant au type primitif ou vide.

Si cet objet de classe représente un la classe des ensembles, puis l'interne forme du nom se compose du nom du type d'élément précédé d'un ou plus d' '[' caractères représentant le profondeur de l'imbrication du tableau. Le l'encodage des noms de type d'élément est le suivant suit:

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, 2011-10-27 09:10:34

C'est un tableau d'objets comme spécifié par JVM Specifications pour la représentation interne des noms de classe:

  • un seul [ signifie un tableau de
  • L suivi d'un nom de classe complet (par exemple java / lang / Object) est le nom de classe terminé par un point-virgule;

Donc, [Ljava.lang.objet; signifie Objet[]

 14
Author: dfa, 2009-07-06 14:10:48

Les règles sont répertoriées dans le document API de la classe .getName () .

[Ljava.lang.Object; serait une instance de Object[]. Notez que les tableaux multidimensionnels sont affichés avec plusieurs accolades d'ouverture.

 5
Author: Michael Borgwardt, 2009-07-06 14:14:05

Signifie Objet []

 -1
Author: omerkudat, 2009-07-06 14:12:13