En Java6 se usaron tanto quicksort como mergesort en Arrays#sort
, para matrices primitivas y de objeto, respectivamente. En Java7, ambos han cambiado, a DualPivotQuicksort y Timsort.Java 7 "optimización" de clasificación
En el origen de la nueva ordenación rápida, el siguiente comentario aparece en un par de lugares (por ejemplo, la línea 354):
/*
* Here and below we use "a[i] = b; i++;" instead
* of "a[i++] = b;" due to performance issue.
*/
¿Cómo es esto un problema de rendimiento? ¿El compilador no reducirá estos a la misma cosa?
Más ampliamente, ¿cuál es una buena estrategia para investigar esto por mi cuenta? Puedo ejecutar benchmarks, pero estaría más interesado en analizar cualquier diferencia en el código compilado. Sin embargo, no sé qué herramientas usar, etc.
O el compilador del punto de acceso ha hecho algo incorrecto (improbable) o los que escribieron el microbenchmark lo arruinaron ... y apuesto a lo último. (Hay muchas razones pequeñas por las que algunos códigos parecen superar a otros, como las páginas de memoria, el tamaño del entorno y lo que no) – bestsss
@bestsss Siempre es posible, por supuesto, pero los tipos que escribieron este código (y posteriormente el comentario) * saben * cómo escribir un punto de referencia. Después de todo, la implementación de la solución rápida de Java ha sido evaluada y ajustada a la muerte. –
FYI, los autores atribuibles de esta clase son Josh Bloch, Jon Bentley (autor de Programming Pearls) y Vladimir Yaroslavskiy –