Pregunta

¿Hay un buen recurso para obtener tiempos de ejecución de funciones de la API estándar? Es un poco confuso cuando se trata de optimizar su programa. Sé que Java no está hecho para ser particularmente rápido pero me parece que no puede encontrar mucha información sobre esto en absoluto.

Ejemplo Problema: Si Busco a una determinada ficha en un archivo es más rápido para escanear cada línea usando string.contains (...) o para poner en, por ejemplo 100 o más líneas de ponerlos en una cadena local de ellas contiene realizar en ese trozo.

¿Fue útil?

Solución

Que yo sepa, no hay puntos de referencia estándar para los métodos de la API, y de hecho, podría haber varias implementaciones basadas en la JVM está ejecutando. Pareja que con optimizaciones de la JVM JIT, colecciones de basura, y un montón de otras cosas, y dudo que puedas obtener los números globalmente significativas. Máximo que puede hacer es escribir sus propios puntos de referencia.

Algunos métodos especifican la complejidad computacional de las operaciones en sus JavaDocs. Algunos otros métodos describen otros problemas de rendimiento. Asegúrese de que está consciente de ellos y les presta atención.

Pero más allá de eso, la mayoría de las ocasiones son que usted está haciendo optimizaciones prematuros. Utilizar un generador de perfiles para ver en realidad es un cuello de botella.

Por ejemplo, en el caso de que haya será el coste de la lectura de un archivo, el costo de colocar cuerdas en el gran buffer, etc. No estoy seguro de que realmente puede optimizar el leyendo a nivel de cadena. Si esto era realmente una misión crítica se podía leer el carácter por carácter e implementar un algoritmo de coincidencia inteligente sin tener que crear cadenas, esto podría ser un poco más rápido.

Otros consejos

Usted está buscando un perfilador

No hay ninguna documentación, ya que puede variar considerablemente de una máquina a otra, OS a OS. Para obtener tiempos precisos para su programa, utilizar un perfilador . Los NetBeans Profiler es buena.

En cuanto a averiguar cuál es el más rápido, no hay mejor alternativa es entonces al código ambos. Alternativamente, se pueden codificar la alternativa más simple, y cuando está trabajando, es posible descubrir que es lo suficientemente rápido para sus necesidades, y no molestar la codificación de la aplicación más compleja.

Si entiendo bien su pregunta, el preguntar si es mejor para leer una línea de algún sitio, o para leer una línea de la memoria. Siempre será más rápido que el texto cargado en la memoria para hacer sus exploraciones a continuación para leerlos desde una corriente de E / S, en especial desde el disco. La velocidad de la lectura no tiene nada que ver con Java, pero la rapidez con la fuente puede conseguir que los datos de su programa.

Estoy de acuerdo con las ideas sobre el uso de un generador de perfiles - pero también puede ser que desee considerar sólo usar log4j (o Apache Commons Logging etc) para obtener algunos datos económicos sobre el desempeño del programa - en el que las entradas de registro en los archivos de registro resultantes tendrán sellos de tiempo a la milésima de segundo más cercana: Desde el registro es generalmente una cosa útil que hacer en la depuración de todos modos, es probable que vale la pena hacer este primer

.

Aprendizaje herramientas de perfiles y aprender a interpretar los datos resultantes suele ser una tarea no trivial en sí misma - la pena hacerlo, pero usted podría ser capaz de obtener una idea aproximada más rápidamente usando sólo datos de registro - especialmente si la formatea como CSV, etc., así importar a una hoja de cálculo.

Si pasamos por alto el tiempo de disco IO, y justo considerar el tiempo de CPU empleado en su código, la segunda opción será mucho más lento que el primero.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top