2010-02-19 7 views
6

¿Es posible consultar una colección que se descarga en un volcado de pila? Obviamente puedo navegar por esa colección usando algo como Eclipse MAT, pero me encantaría poder llamar realmente a getter en el objeto de colección. Esto obviamente sería mucho más claro que pasar por los segmentos en un ConcurrentHashMap tratando de encontrar el mapeo que necesito.Herramientas para consultar colecciones en el volcado de heap

Supongo que lo que estoy buscando es una forma de 'rehidratar' el estado objeto de dumping de una colección con nombre para que pueda ser manipulado utilizando las API estándar.

¿Alguien sabe de tales utilidades, o, si no, puede alguien proporcionar algún código de muestra o indicadores sobre cómo lograr esto?

Respuesta

6

Debería poder consultar todas las colecciones o una sola con Object Query Language (OQL) en jhat.

No puede invocar necesariamente métodos arbitrarios, pero puede escribir algunas consultas complicadas utilizando las funciones disponibles.

A. Sundararajan tiene algunas publicaciones de blog interesantes sobre el tema que muestran lo que puede hacer. Ver here y here.

Por ejemplo, se pueden encontrar todas las instancias de java.util.HashMap que tienen una clave prueba con la siguiente consulta:

select s from java.util.HashMap s where contains(s.table, function(it) { 
    if (it && it.key && it.key.value && it.key.value.toString() == 'test') { 
     return true; 
    } 
    return false; 
}) 

ello debe tener la misma clave en un java.util.concurrent.ConcurrentHashMap:

select s from java.util.concurrent.ConcurrentHashMap s where contains(s.segments, function(it) { 
    if (!it || !it.table) { 
     return false; 
    } 
    var i, e; 
    for (i=0; i < it.table.length; i = i + 1) { 
     e = it.table[i]; 
     if (e) { 
      return e.key && e.key.value && e.key.value.toString() == 'test'; 
     } 
    } 
    return false; 
}) 
+0

Gracias - Realmente no me había dado cuenta de que OQL era tan poderoso. Tal vez cuando tenga tiempo, escribiré una herramienta para permitir la consulta 'apropiada' de las colecciones, ¡pero estas consultas OQL harán lo que yo quiera por ahora! – Rich

Cuestiones relacionadas