sirve - settitle java
¿Qué herramienta de depuración puede listar cadenas internalizadas? (2)
Estoy buscando una herramienta de depuración que pueda enumerar las cadenas que se han internalizado? Idealmente, me gustaría poner una marca y tener una lista de las cadenas que se agregaron después de esa marca.
Gracias por adelantado.
En la máquina virtual Hotspot reciente, las cadenas internas se ven como cualquier otra - la única diferencia es que la matriz de caracteres está siendo rastreada por la VM (pensé que tiene una referencia JNI adicional, pero no se muestra en el volcado de YourKit) interesante para investigar).
Dicho esto, Yourkit proporciona una inspección de memoria para cadenas duplicadas, que creo que hace lo que necesitas. Si lo combina con ''Rastreo de asignaciones'', puede acceder directamente al código que asignó estas cadenas.
Consulte http://www.yourkit.com/docs/95/help/inspections_mem.jsp#duplicate_strings
-
Obtener la lista de cadenas agregadas entre dos puntos en el tiempo es más fácil:
- Consigue dos volcados de pila utilizando jmap o tu perfilador favorito
- Hacer un diff de los montones
- Mostrar todas las instancias de la clase String.
Debe ser factible con cualquier perfilador o incluso jhat (si eres lo suficientemente paciente). Si usa YourKit, puede usar la función de marcador y tomar solo una instantánea del montón.
Quizás la forma más fácil es usar un visor de código de bytes. Cualquier String que esté internado estará presente en el constant_pool del archivo de clase en el que se incluye el String literal. Por ejemplo, en un archivo de clase reciente de otra pregunta de que respondí, tenía el siguiente literal de String en mi código: "sun.awt.noerasebackground"
. Esto se muestra en la agrupación constante como un tipo ''String_info''
. El visor de bytecode (y el editor, ¡así que cuidado!) Que utilizo es el JBE. Descargar JBE