2009-07-06 12 views
31

Estoy tratando de rastrear una pérdida de memoria en un proceso de java, usando jmap y jhat. Cada vez que hago esto, veo esas extrañas anotaciones para tipos de objetos específicos, como [S para matrices de cadenas y [C para matrices de caracteres. Nunca recuerdo qué significa qué, y es muy difícil googlear esto.¿Qué significan esos extraños nombres de clase en un volcado de un montón de Java?

(EDITAR: para probar mi punto, resulta que [S es gama de corta y [C es arreglo de char.)

A alguien le importa hacer una tabla que enumera todos los diferentes nombres de clase y lo que ¿media? ¿O señalarme a esa mesa?

Específicamente me gustaría saber qué significa [Ljava.lang.Object;.

+0

Matriz de cadena debe ser _ [Ljava/lang/cadena; _. –

+0

En mi defensa, googlear me llevó a un artículo en java.sun.com que contiene esta línea: "Los objetos de matriz String y Character, [S y [C, siempre van a estar arriba en esta lista". Un poco engañoso. – itsadok

+0

Este sitio también tiene buena información: https://communities.ca.com/web/ca-wily-global-user-community/wiki/-/wiki/Main/JNI+Signatures/contactLink – masterxilo

Respuesta

55

Encontrará la lista completa documentado bajo Class.getName():

Si esta clase de objeto representa un tipo referencia que no es un tipo de matriz entonces el nombre del binario de la clase se devuelve, como se especifica por el Java ™ Especificación del idioma, Segunda Edición.

Si este objeto clase representa un tipo primitivo o nula, entonces el nombre devuelto es un String igual a la palabra clave lenguaje Java correspondiente al tipo primitivo o nula.

Si esta clase de objeto representa una clase de arrays, entonces el forma interna del nombre consiste en el nombre del tipo de elemento precedido de uno o más '[' caracteres que representan el profundidad de la anidación array .El codificación de nombres de tipo de elemento es como sigue:

 
Element Type  Encoding 
boolean    Z 
byte    B 
char    C 
class or interface Lclassname; 
double    D 
float    F 
int     I 
long    J 
short    S 
14

es una matriz de objetos según lo especificado por JVM Specifications para la representación interna de nombres de clase:

  • un solo [medios una matriz de
  • L seguido por un nombre de clase completo (por ejemplo java/lang/Object) es el nombre de clase terminado con punto y coma;

so [Ljava.lang.object; significa Object []

+0

La sección 4.3.2 es probablemente una mejor referencia. –

+0

ese enlace en realidad no describe las convenciones utilizadas por Class.getName() - de hecho, la representación de nombres interna es bastante diferente – kdgregory

+0

Class.getName() nunca es citado por itsadok ... – dfa

5

Las reglas se enumeran en el doc API de Class.getName().

[Ljava.lang.Object; sería una instancia de Object[]. Tenga en cuenta que las matrices multidimensionales se muestran con múltiples llaves de apertura.

Cuestiones relacionadas