2010-05-31 12 views
6

Como recuerdo, hay una opción de línea de comando mágico en Java que activa la escritura de las operaciones que se ejecutan actualmente en la consola. La salida se veía como código de bytes.Detalles de ejecución de Java en System.out

-verbose no coincide ya que solo imprime carga de clase, mientras que esta opción genera información como asignación de memoria, configuración de variables locales, etc. Fue muy detallada, como 10 líneas para "Hola mundo".

No he encontrado que ni aquí ni aquí http://java.sun.com/javase/technologies/hotspot/vmoptions.jsphttp://java.sun.com/j2se/1.3/docs/tooldocs/solaris/java.html También he encontrado algunas banderas here, pero la mayoría de ellos trabajan sólo en OpenJDK o en el modo de desarrollarse. Tal vez hay una manera en que puedo iniciar java.exe en Windows en este modo de desarrollo. O tal vez hay otro conjunto de banderas que esta lista se pierda?

+1

1 Me gustaría saber eso también. – naiad

Respuesta

2

No es exactamente lo que pediste, pero soy un gran admirador de "kill -3" en la identificación del proceso de Java, que arroja todo tipo de información sobre cada hilo y su estado, qué cerraduras tienen y qué cerraduras están esperando, y ese tipo de cosas.

+0

'jstack' es bastante limpio también. –

+0

Existen herramientas para analizar esos volcados y mostrarlos de forma más agradable, p. Ej. el Visor de volcado de subprocesos: http://sourceforge.net/projects/tdv/ – ZeissS

+0

+1 y tenga en cuenta que "matar -3" es un nombre inapropiado (el comando "matar" en realidad está mal definido) ya que no mata para nada el proceso. Menciono esto porque leí (y escuché) esa pregunta varias veces: * "¿Va a matar el proceso?" *. No, no lo hará, simplemente envía una señal que, como resultado, genera muchas informaciones de JVM en la consola :) – NoozNooz42

1

En las ventanas usar Ctrl-Break para crear un vertedero de hilo. Para monitorizar la carga de clase uso -verbose:class para la recolección de basura -verbose:gc

1

opciones soportadas here. Lo más parecido que puedo encontrar a su descripción es -verbose: gc, o quizás -verbose: clase.

javap producirá bytecode, pero es un desensamblador estático y no está relacionado con el tiempo de ejecución.

1

He estado usando jvisualvm un poco recientemente; tal vez eso te daría lo que quieres? Hace perfiles de memoria y uso de CPU, puede volcar subprocesos de hilo e incluso puede persuadir a la JVM para que enumere qué actividad de cargador de clases está sucediendo (a través del soporte de MBean: vaya a java.langClassLoading, seleccione Attributes y actualice Verbose; a System.out por supuesto). Lo bueno de esto es que no necesitas nada para habilitarlo (normalmente); solo puede adjuntar a las JVM ya en ejecución. (Si tiene Java 1.5, use jconsole en su lugar.)

Sin embargo, tenga en cuenta que es poco probable que obtenga un volcado de los bytecodes que se ejecutan. Esto se debe a que el motor HotSpot JIT, que ha existido durante algunos años, convierte los códigos de bytes en instrucciones nativas antes de la ejecución, por lo que para cuando se ejecuta el código, simplemente no hay códigos de bytes para que el instrumento informe. En teoría, es posible que pueda construir una máquina virtual especial que funcione de la manera antigua, pero sería terriblemente lenta (como en los viejos tiempos malos) así que ¿por qué querría realmente?

+0

Necesito la salida en tiempo de ejecución como registrador en modo de depuración, pero en el nivel bajo – John

+0

Bien , lo bueno de jvisualvm es que se puede conectar a ejecutar JVM y hurgar en su interior. Una de las cosas que puede hacer (con el plugin de MBeans) es ir dentro de los controles sobre si registrar clases cargadas ('java.lang → ClassLoading \ Verbose') y encenderlo editando la bandera. La belleza de esto? No necesita haber recordado establecer la bandera cuando inició la JVM. –

+0

Editado en lo de arriba en mi respuesta. –

Cuestiones relacionadas