2008-09-18 14 views
9

Estoy escribiendo un juego de damas simple en Java. Cuando muevo el mouse sobre la placa, mi procesador aumenta hasta un 50% (100% en un núcleo).Java: ¿Cómo puedo ver qué partes de mi código están ejecutando más? (perfilado)

Me gustaría saber qué parte de mi código (asumiendo que es mi culpa) se está ejecutando durante esto.

He intentado depurar, pero la depuración paso a paso no funciona muy bien en este caso.

¿Hay alguna herramienta que pueda decirme dónde está mi problema? Actualmente estoy usando Eclipse.

+0

gracias chicos! Estoy usando eclipse por cierto – jjnguy

Respuesta

2

¿Perfiles? No sé qué IDE está utilizando, pero Eclipse has a decent proflier y también hay una lista de algunos analizadores de código abierto en java-source.

+0

¿Podría escribir algunos consejos sobre el uso de TPTP? Eso sería oro! –

1

1) Es tu culpa :)

2) Si estás usando Eclipse o NetBeans, trate de usar las características de perfiles - que debe decirle con bastante rapidez cuando el código está gastando un montón de tiempo.

3) En su defecto, agregue la salida de la consola donde cree que está el bucle interno, debería poder encontrarlo rápidamente.

1

Sí, hay tales herramientas: tiene que perfilar el código. Puede probar TPTP en Eclipse o quizás intente JProfiler. Eso te permitirá ver lo que se llama y con qué frecuencia.

3

utilizar un generador de perfiles (por ejemplo yourkit)

0

O utilizar los casos de prueba JUnit y una herramienta de cobertura de código para algunos componentes comunes de los suyos. Si hay componentes que llaman a otros componentes, verá rápidamente aquellos ejecutados muchas veces más.

Uso Clover con los casos de prueba JUnit, pero para Open Source, escuché que EMMA es bastante bueno.

2

En pocas palabras, profilers le dirá qué parte de su programa se llama cuántas veces.

No perfilo mucho mis programas, así que no tengo demasiada experiencia, pero he jugado con el generador de perfiles NetBeans IDE cuando lo estaba probando. (Yo también uso Eclipse. También buscaré las características de creación de perfiles en Eclipse.)

El perfilador de NetBeans le dirá qué hilo se estuvo ejecutando durante cuánto tiempo, y qué métodos se han llamado por cuánto tiempo, y dará usted muestra gráficas de barras para mostrar cuánto tiempo ha tomado cada método. Esto debería darle una pista sobre qué método está causando problemas. Puede echar un vistazo al Java profiler que proporciona NetBeans IDE, si tiene curiosidad.

La creación de perfiles es una técnica que generalmente se usa para medir qué partes de un programa ocupan mucho tiempo de ejecución, lo que a su vez puede utilizarse para evaluar si realizar optimizaciones sería beneficioso para aumentar el rendimiento de un programa. programa.

¡Buena suerte!

1

Este es un problema típico de 'CPU alta'.

Hay dos tipo de problemas de altos CPU

a) Cuando el hilo está utilizando 100% de la CPU de un núcleo (Esto es su escenario)

b) uso de la CPU es 'anormalmente alta' cuando ejecutar ciertas acciones. En tales casos, la CPU puede no ser del 100%, pero será anormalmente alta. Por lo general, esto sucede cuando tenemos operaciones intensivas de CPU en el código como el análisis XML, serialización de serialización, etc.

El caso (a) es fácil de analizar. Cuando experimentas un 100% de CPU 5-6 volcados de hilo en un intervalo de 30 segundos. Busque un hilo que esté activo (en estado "ejecutable") y que esté dentro del mismo método (puede inferirlo al monitorear la pila de hilos). Lo más probable es que usted verá una 'espera ocupado' (véase el código de abajo para ver un ejemplo)

while(true){ 
    if(status) break; 
    // Thread.sleep(60000); // such a statement would have avoided busy wait 
} 

Caso (b) también se pueden analizar utilizando vertederos de rosca tomadas en intervalos iguales. Si tiene suerte, podrá encontrar el código del problema, si no puede identificar el código del problema mediante el uso de volcado de hilo. Necesitas recurrir a los profilers. En mi experiencia, el perfil de YourKit es muy bueno.

Siempre trato primero con los volcados de hilo. Los perfiladores solo serán el último recurso. En el 80% de los casos, podremos identificar el uso de volcados de hilo.

1

Si está utilizando Sun Java 6, las versiones más recientes de JDK vienen con JVisualVM en el directorio bin. Esta es una herramienta capaz de monitorear y crear perfiles que requerirá muy poco esfuerzo de usar, ni siquiera necesita iniciar su programa con parámetros especiales. JVisualVM simplemente enumera todos los procesos java que se ejecutan actualmente y usted elige el que desea jugar con .

Esta herramienta le indicará qué métodos utilizan todo el tiempo del procesador.

Existen muchas herramientas más poderosas, pero primero hay que jugar con una gratis. Luego, cuando leas qué otras características están disponibles, verás cómo podrían ayudarte.

0

En el código de un solo subproceso, me parece agregar algunas declaraciones como esta: System.out.println ("A:" + System.currentTimeMillis()); es más simple y efectivo que usar un generador de perfiles. Pronto puede reducir la parte del código que causa el problema.

+0

Su multi roscado. Pero recordaré ese consejo para otro momento. – jjnguy

Cuestiones relacionadas