2012-07-20 15 views
7

Me ha interesado el tiempo que necesita ejecutar mi juego simple, así que he utilizado el generador de perfiles Java de Netbeans (Java 1.7) y puedo ver las columnas "Tiempo propio" e "Invocaciones" en la pestaña "Hot Spots".¿Qué significa en realidad "Self Time" del perfilador de Netbeans?

Por ejemplo, mi rendir método tiene:

mismo tiempo: 1025 ms

invocaciones: 2311

Por lo tanto, si he entendido bien, significa en realidad que el total la cantidad de tiempo de TODAS las invocaciones de métodos de renderización dan juntos 1025 ms y el tiempo promedio de ejecución de un método es 1025/2311 = 0,44 ms?

En caso afirmativo, ¿puedo forzar al IDE a que muestre tiempos promedio en lugar de tiempos totales?

+1

¿Por qué quiere que se muestre el promedio si su objetivo es reducir el total? –

+3

Bueno, si tengo un bucle de juego implementado en un método, me gustaría ver cuánto tiempo toma una ejecución (fotograma) ... –

+0

Sí, necesita dividir. Sin embargo, ejecutar el generador de perfiles en el modo de instrumentación (o, de hecho, ejecutarlo), influye en el rendimiento (como la prevención de optimizaciones de JIT) y no es muy útil. La sincronización/benchmarking manual (por ejemplo, llamar a System.nanoTime) puede ser mejor pero también está plagado de problemas. –

Respuesta

19

Normalmente, el "tiempo propio" mide el tiempo pasado dentro de el cuerpo del método, excluyendo el tiempo empleado en los métodos que llama. Por ejemplo, supongamos que tiene un método simple para recuperar los usuarios ordenados, , que llamó a dos métodos que no realizaron ninguna otra llamada.

UserList getUsers() { 
    return sortUsers(loadUsers()); 
} 

Desde no realiza trabajo, su tiempo de auto sería muy baja a pesar de que una llamada al método es caro.

Method  Self Time Call Time 
----------- --------- --------- 
getUsers   3 ms 1,184 ms 
loadUsers  923 ms  923 ms 
sortUsers  258 ms  258 ms 

Esto se basa en otros perfiles que he usado, no en NetBeans. Esperemos que alguien pueda confirmar o negar esto por NetBeans.

+2

Nota: Los métodos que están en línea contarán para el * tiempo del padre * y no se informarán. A menos que la mera presencia del generador de perfiles provoque que el JIT desalinee esos métodos y verá un descenso general del rendimiento. El generador de perfiles no es muy útil para comprender el rendimiento de los métodos esenciales del tiempo. Microbenchmarking (es decir, sin que el perfilador esté involucrado) es mejor, aunque es difícil hacerlo bien. –

Cuestiones relacionadas