¿Qué significan esos extraños nombres de clase en un volcado de un montón de Java?
debugging memory-leaks (4)
Encontrará la lista completa documentada en Class.getName() :
Si este objeto de clase representa un tipo de referencia que no es un tipo de matriz, se devuelve el nombre binario de la clase, tal como lo especifica Java ™ Language Specification, Second Edition .
Si este objeto de clase representa un tipo primitivo o vacío, el nombre devuelto es una
String
igual a la palabra clave del lenguaje Java correspondiente al tipo primitivo o vacío.Si este objeto de clase representa una clase de matrices, la forma interna del nombre consiste en el nombre del tipo de elemento precedido por uno o más ''['' caracteres que representan la profundidad de la disposición de la matriz. La codificación de los nombres de los tipos de elementos es la siguiente:
Element Type Encoding boolean Z byte B char C class or interface Lclassname; double D float F int I long J short S
Estoy tratando de localizar una fuga de memoria en un proceso de Java, usando jmap y jhat . Cada vez que hago esto, veo esas notaciones extrañas 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.
( EDITAR : para probar mi punto, resulta que [S
es una matriz de short y [C
es una matriz de char)]
¿Alguien quiere hacer una tabla con todos los nombres de las diferentes clases y lo que significan? ¿O señalarme a esa mesa?
Específicamente, me gustaría saber qué [Ljava.lang.Object;
medio.
Las reglas se enumeran en el documento 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.
Objeto de medios []
es una matriz de objetos especificada por las especificaciones JVM para la representación interna de nombres de clase:
- un solo [significa una serie de
- L seguido de un nombre de clase totalmente calificado (por ejemplo, java / lang / Object) es el nombre de la clase terminado por punto y coma;
entonces [Ljava.lang.object; significa Objeto []