2010-06-29 9 views
14

Me gustaría aprender cómo, o si es posible interactuar programáticamente con una aplicación java black-box (leyendo sus datos). ¿Ha habido alguna investigación/trabajo anterior para hacer este tipo de cosas?¿Es posible leer la memoria de una aplicación Java en ejecución?

Me imagino que ejecutar una JVM complica las cosas significativamente.

@anon: Hacer esto con cualquier JVM es relevante. ¿Tiene que saber o controlar los detalles de cómo la JVM asigna memoria para extraer datos de una aplicación java?

+1

¿Se ejecuta en una JVM arbitraria, o una JVM comercial en particular, o en una JVM que haya desarrollado especialmente para este fin? Correr en una máquina virtual en lugar de una real facilita * las cosas * si controla las partes internas de la VM, y aunque no lo haga, no lo hará más difícil siempre que sepa cuáles son esas partes internas. –

+0

Un hilo relacionado que debería aplicarse aquí: http://stackoverflow.com/questions/2771868/can-i-access-object-from-another-jvms-memory-without-requesting-that-jvm – Greg

+1

Quizás la interfaz del depurador ayude http://java.sun.com/j2se/1.3/docs/guide/jpda/jvmdi-spec.html – josefx

Respuesta

2

Puede consultar java.lang.instrument. Siempre que comprenda la estructura de clase de la aplicación, le permitirá modificar los métodos en una JVM ya en ejecución y podrá inventar una forma que le permita extraer o insertar datos lo suficiente como para comunicarse (depende de los métodos) disponible, por supuesto).

+0

Gracias, nunca había oído hablar de esto y parece prometedor. Me imagino que usarlo junto con las herramientas de creación de perfiles que otras respuestas han mencionado también podrían ser útiles. –

0

El grupo Sable de la Universidad McGill ha contribuido con mucha investigación al mundo de Java.

Gran parte del trabajo es cada vez más anticuado, pero puede encontrar algo de ayuda en su proyecto EVolve que tiene el objetivo de visualizar programas orientados a objetos. Algunos de sus proyectos parecen mantenerse activamente (como Soot, su marco de optimización de Java), por lo que puede encontrar suerte contactándolos directamente

0

Creo que lo que está buscando es lo que hace el Eclipse MAT. Es posible que desee echar un vistazo al código fuente ...

0

El HotSpot JVM le permite conectar otro agentlib de un generador de perfiles (ver Open Source Java Profilers o comerciales como Your Kit), en el generador de perfiles a continuación, puede inspeccionar la memoria/cpu/hilos, etc. Si desea cosas muy específicas, es posible que desee crear su propia agentlib que le envíe información acerca de la JVM que necesita.

1

Es fácilmente posible con, por ejemplo, StackTrace. Se puede conectar a un proceso de Java y le permite inspeccionar y cambiar casi todo con BeanShell.

+0

Parece que el enlace está roto? –

Cuestiones relacionadas