propiedades de Java y la concatenación de cadenas

Descripción general: Este trabajo estudia el rendimiento de la concatenación de cadenas de Java, el texto original del código de prueba no es funcionalmente equivalente, lo que resulta en pequeña prueba de concat importancia. Sin embargo, el autor original en la columna de comentarios a un nuevo resultado concat, si los estudiantes están interesados ​​en sus propias propuestas para modificar el código de prueba.

Empalme de dos cadenas en JAVA forma más fácil es usar el operador "+" a. Si se está conectando a una cadena de longitud fija por "+", el rendimiento puede verse afectado ligeramente, pero si usted está en el ciclo de "+" en una pluralidad de cadenas, entonces el rendimiento disminuirá exponencialmente. Supongamos que hay una cadena, la cadena vamos a hacer un montón de operación de empalme en bicicleta, usar el signo "+", a continuación, tiene el mejor rendimiento. Pero exactamente cómo este pobre desempeño? Si además ponemos StringBuffer, StringBuilder o String.concat () en la prueba de rendimiento, el resultado entonces? Este artículo le dará una respuesta a estas preguntas!

Vamos a utilizar Per4j para calcular el rendimiento ya que esta herramienta nos puede dar un conjunto completo de indicadores de rendimiento, como mínimo, máximo, desviación estándar de tiempo y otro período de tiempo estadístico. En el código de prueba con el fin de obtener un valor de desviación estándar precisa, ejecutaremos 20 mosaico "*" 50.000 pruebas. Este es el método que utilizaremos para empalmar la cadena:

La concatenación de operador (+)
Cadena concat Método, - concat (String str)
StringBuffer método, el append - append (String str)
el método StringBuilder, el append - append (String str)
Por último, vamos a echar un vistazo al código de bytes, cómo estudiar estos métodos en el final es llevar a cabo a. Ahora, vamos a empezar a crear mi clase palpable. Tenga en cuenta que con el fin de calcular el rendimiento de cada ciclo, cada código de prueba en la necesidad de código sea biblioteca de encapsulación Per4J. En primer lugar, vamos a definir el número de iteraciones

1 privado static final OUTER_ITERATION int = 20;
2 estática privada final int INNER_ITERATION = 50000;

A continuación, vamos a lograr nuestro código de prueba utilizando los cuatro métodos anteriores.
propiedades de Java y la concatenación de cadenas

Junto a generar métricas de rendimiento mediante la ejecución del programa. I es un entorno operativo de 64 bits sistema operativo Windown7, 32-bit JVM (7-ea) con 4 GB de RAM, una máquina Quad 2,00 GHz CPU de doble núcleo.

Después de 20 iteraciones, se obtienen los siguientes datos:

propiedades de Java y la concatenación de cadenas

Los resultados perfectos como imaginamos. Lo único interesante es la razón por la String.concat también muy bueno, todos sabemos, la cadena es una clase normal (la clase no cambia después de la inicialización), entonces ¿por qué el rendimiento concat será mejor aún. (Nota del traductor: En realidad, el autor original del código de prueba de que se trate, a concat código de prueba () método debe ser escrito concatTestStr = concatTestStr.concat ( "*") peces.) Para responder a esta pregunta, debemos mirar concat decompilados código de bytes a cabo. En este paquete de descarga de papel que contiene todo el código de bytes, pero ahora nos fijamos en concat de este fragmento de código:
propiedades de Java y la concatenación de cadenas

Este código es String.concat () código de bytes de este código, podemos ver claramente, concat () utiliza StringBuilder, concat () y el rendimiento StringBuilder debe ser tan bueno, pero debido a la adicional StringBuilder crear y hacer .Append (str) .Append (str) .toString operación (), por lo que el rendimiento concate se verá afectada en cierta medida, por lo StringBuilder y cadena Cancate tiempo de 1,8 y 3,3.

Por lo tanto, el instante en que haciendo costura simple, si no queremos crear la instancia StringBuffer o StringBuilder, también debido a la utilización concat. Sin embargo, para un gran número de operación de las cadenas de empalme, no debemos usar concat (Nota del traductor: Dado que el código de prueba no es totalmente equivalente funcional, el tiempo promedio del código concat prueba 1650.9 milisegundos después de que el cambio es el resultado en el original los comentarios dentro.), debido a concat reducirá el rendimiento de su programa, que consume la CPU. Por lo tanto, sin tener en cuenta la seguridad y sincronización de hilos con el fin de obtener el máximo rendimiento, debemos tratar de utilizar StringBuilder

Supongo que te gusta

Origin blog.51cto.com/11395518/2476957
Recomendado
Clasificación